2010-01-15 12 views
7

ग्रहण में हमारी परियोजना में लगभग चलता निम्न फ़ोल्डर शामिल करने के लिए निर्यात:ग्रहण: .jar और संसाधन फ़ाइलों (चींटी)

application 
    - src 
    - JRE System Library [1.6] 
    - Referenced Libraries 
    - lib 
    - rsc 

हमारी परियोजना में, हम फ़ाइल> निर्यात उपयोग करना चाहते हैं ...> निष्पादन JAR

ठीक है कि कुछ अपवाद के साथ ठीक काम करता है: अगर हम अपना आवेदन चलाने के लिए चाहते हैं .jar, हमें अभी भी application.jar के समान स्थान में फ़ोल्डर आरएससी/प्रतिलिपि बनाने की आवश्यकता है।

आरएससी/में, हमारे पास अलग-अलग हिस्सों को अलग करने के लिए अन्य फ़ोल्डर्स हैं। असल में, हम कोड का उपयोग कर टुकड़े लोड (अच्छी तरह से थोड़ा बदल, लेकिन पथ शैली सही है)

strUrl = "file:rsc/properties/Constants.properties"; 
url = new URL(strUrl); 
ImageIcon icon = new ImageIcon(url); 

मैं /> का निर्माण पथ> स्रोत फ़ोल्डर के रूप में प्रयोग करें आरएससी पर rightclick सकता है।

लेकिन यह काम नहीं करता है क्योंकि ग्रहण स्वचालित रूप से आरएससी फ़ोल्डर को बिन/फ़ोल्डर में कॉपी नहीं करता है। और फिर हम इसे टर्मिनल से नहीं चला सकते हैं (जार में पैक नहीं किया गया)

EDIT: ग्रहण सही तरीके से इसे संभालने में असमर्थ क्यों है? इसे "नेस्टेड" आउटपुट फ़ोल्डरों में समस्या क्यों है? बिल्ड पथ संवाद के स्रोत-टैब में, मैं आसानी से आरएससी/फ़ोल्डर को आउटपुट फ़ोल्डर सेट के साथ बिन/आरएससी/में जोड़ सकता हूं, लेकिन ऐसा लगता है कि यह नेस्टेड फ़ोल्डर्स डालने में सक्षम नहीं है ...


EDIT 2: अब मैं चींटी बनाने के लिए एक एक्सएमएल-फाइल बनाने में सक्षम हूं, और किसी भी तरह से आरएससी-फ़ोल्डर को जार में शामिल करने में कामयाब रहा। अभी भी एक ही त्रुटि के कारण नहीं चला है। क्या मुझे वास्तव में संसाधन पथों की जांच करने की आवश्यकता है कि वे एक जार में हैं या नहीं? जार की सामग्री अब वह इस प्रकार है:

META-INF/ 
META-INF/MANIFEST.MF 
configurator/ 
controller/ 
editor/ 
gui/ 
logic/ 
networking/ 
rsc/ 
rsc/gamesettings/ 
rsc/levels/ 
rsc/pics/ 
rsc/properties/ 
util/ 

लेकिन जावा अभी भी मुझे नफरत करता है और करीब 100 लाइनों की एक स्टैकट्रेस साथ java.io.FileNotFoundException: rsc/properties/Constants.properties फेंकता है।


कोई भी यह विचार करता है कि यह कैसे करें? thx &

उत्तर

15

आप एक स्रोत फ़ोल्डर के रूप में rsc चिह्नित करते हैं ग्रहण इसकी सामग्री को आउटपुट निर्देशिका में कॉपी करेगा। या फिर आप rscsrc के तहत संसाधनों उत्पादन में कदम सकता है कि समूह के लिए अगर आप चाहते हैं।

फिर आप Class.getResource("/properties/Constants.properties") या Class.getResource("/rsc/properties/Constants.properties") का उपयोग कर सकते हैं और यह तब भी काम करेगा जब आपका ऐप जार के रूप में पैक किया गया हो या स्रोत से चल रहा हो।

एक sidenote के रूप में, file: प्रोटोकॉल केवल सामान्य फ़ाइलों के साथ काम करता है, जार के अंदर फ़ाइलों तक पहुंचने के लिए आपको new URL("jar:file:app.jar!/rsc/properties/Constants.properties") जैसे कुछ उपयोग करना होगा।

+0

हाँ कोशिश करेंगे की है। यह समाधान था, लेकिन ग्रहण में आरएससी/स्रोत-फ़ोल्डर के रूप में चिह्नित करना नौकरी नहीं करता है। एक और छात्र ने मुझे एक ही समाधान का अधिकार दिया। समस्या यह थी कि हमें Class.getResource ("...") का उपयोग करना था, पथ '' 'के साथ प्रीपेड किया गया था। thx और – Atmocreations

+0

का संबंध है क्षमा करें, 'कक्षा # getResource() 'से आपका क्या मतलब है? 'कक्षा' कक्षा में ऐसी कोई स्थिर विधि नहीं है। – m0skit0

+0

@ m0skit0 विधि स्थिर नहीं है, भ्रम के लिए खेद है। –

2

इस तरह के उपयोग के लिए, मैं Maven का उपयोग करने की सिफारिश करता हूं, जो एक जार बनाने के दौरान स्वचालित रूप से करता है। यहां तक ​​कि an Eclipse plugin भी है।

आप Ant का भी उपयोग कर सकते हैं।

+0

THX, मुझे पता है कि उपकरणों की इस तरह से मौजूद हैं। लेकिन मैं उन लोगों के साथ किसी भी अनुभव नहीं मिला है और मेरी राय है कि यदि ग्रहण निष्पादन योग्य जार के बनाने के लिए एक उपकरण प्रदान करता है, मुझे लगता है कि यह बस बिना संशोधित किए जार करने के लिए किसी अन्य फ़ोल्डर जोड़ने के लिए संभव हो जाना चाहिए है। आपकी प्रतिक्रिया के लिए – Atmocreations

4

आप कोशिश कर सकते हैं: जावा बिल्ड पथ संवाद में, पुस्तकालय टैब पर जाएं और "कक्षा फ़ोल्डर जोड़ें ..." चुनें। कक्षा फ़ोल्डर चयन संवाद से rsc का चयन करें। rsc निर्देशिका की सामग्री अब निष्पादन योग्य जार फ़ाइल में शामिल की जाएगी।

(ध्यान दें कि आरएससी ही शामिल नहीं किया जाएगा, ताकि आप आरएससी के तहत एक नया उप-निर्देशिका जोड़ने के लिए जार सही में निर्देशिका संरचना बनाने के लिए हो सकता है।)

+0

thx। हाँ हाँ, यह काम करेगा। लेकिन समस्या यह है कि मैं में आरएससी/आरएससी/स्थानीय रन (जार फ़ाइल के निर्माण के बिना) अब काम नहीं करेंगे, क्योंकि ... – Atmocreations

1

मैं यह आम तौर पर मैन्युअल रूप से करना, अपने मामले में jar -uf foo.jar आरएससी जिसमें आपके सभी संसाधन शामिल हैं। आप एक स्क्रिप्ट लिखने या चींटी

1

में यह कर आप में कहते हैं के रूप में संपादित 2 आप एक जार में समस्त जानकारी है सकते हैं, यह काम करना चाहिए:

String path = "rsc/img/img.gif"; 
URL url = this.getClass().getResource(path); 
ImageIcon icon = new ImageIcon(url); 
+0

आपकी प्रतिक्रिया के लिए धन्यवाद इन वस्तुओं को स्थानांतरित नहीं किया जा सकता है। मैं कहना है कि "this.getClass()" src/util/ में स्थित है यह – Atmocreations

संबंधित मुद्दे