से संसाधन लोड करने के लिए कैसे मैं एक एम्बेडेड जेएआर फ़ाइल में निहित संसाधन लोड करने की कोशिश कर रहा हूं। परियोजना वास्तव में JBoss में तैनात किया जाता है निम्नलिखित संरचना के साथ एक EAR फ़ाइल का उपयोग:एम्बेडेड जेएआर फ़ाइल
deploy.ear
|
|-> project.sar
|
|-> sub_project.jar
| |
| |-> settings.xml
|
|-> com/path/project/
|
|-> main.class
main.java
से मैं एक InputStream
settings.xml
के लिए प्राप्त करना चाहते हैं। ऐसा करने का सही तरीका क्या है?
मेरे वर्तमान समझ है कि निम्नलिखित कोड काम करना चाहिए, लेकिन यह null
लौटा रहा है:
this.getClass().getResourceAsStream("settings.xml");
अद्यतन
कुछ परीक्षण और त्रुटि के बाद, निम्नलिखित बयानों काम:
getClass().getResourceAsStream("/settings.xml");
getClass().getResourceAsStream("/sub_project.jar/settings.xml");
getClass().getClassLoader().getResourceAsStream("/settings.xml");
getClass().getClassLoader().getResourceAsStream("settings.xml");
getClass().getClassLoader().getResourceAsStream("sub_project.jar/settings.xml");
getClass().getClassLoader().getResourceAsStream("/sub_project.jar/settings.xml");
जावा वर्ग लोडर का उपयोग कर प्राप्त कर सकते हैं एम्बेडेड जार से लोड संसाधन नहीं कर सकते, तो अपने सेट अप नहीं किया जाएगा काम। एक जार समाधान इस समस्या को हल करता है, ईरान का जवाब देखें। – MeBigFatGuy
सुनिश्चित नहीं है कि /sub_project.jar/settings.xml एक मानक नोटेशन है। जेबॉस एक्सटेंशन हो सकता है। –
मुझे आश्चर्य हुआ कि "सेटिंग्स.एक्सएमएल" क्यों विफल रहा, जबकि "/settings.xml" काम करता था, लेकिन फिर मैंने प्रलेखन पढ़ा है: * यदि संसाधन का नाम "/" से शुरू होता है, तो यह अपरिवर्तित है; अन्यथा, पैकेज नाम को बदलने के बाद संसाधन नाम पर प्रीपेड किया जाता है "। "/".* क्लास.क्लास यह करता है, लेकिन ClassLoader.class नहीं करता है। आज कुछ नया सीख लिया ... –