2017-04-23 23 views
7

मैं जावा 9 के साथ चलाने के लिए अपना आवेदन प्राप्त करने की कोशिश कर रहा हूं, लेकिन दुर्भाग्यवश सादा जार निर्भरताओं में से एक, जब यहका उपयोग करके संसाधन लोड करने का प्रयास करता है, तो इसके बजाय शून्य हो जाता है।जावा 9 में स्वचालित मॉड्यूल को अपने संसाधनों को कैसे ढूंढने दें?

यह, ज़ाहिर है, जावा 8.

में काम करता है मैं प्रश्न में मॉड्यूल मॉड्यूल फ़ाइल का उपयोग पर निर्भरता की घोषणा की, इसके जार का नाम (भयंकर) द्वारा मॉड्यूल के नाम की चर्चा करते हुए, और कहा --module-path विकल्प का उपयोग कर जार एएस-है (जावा 9 के लिए कोई अनुकूलन नहीं)।

यहाँ मेरी अनुमानित मॉड्यूल फ़ाइल घोषणा है:

module my.mod { 
    requires ivy; // the file is called ivy-2.4.0.jar 
} 

और मैं इस आदेश के साथ चलाएँ:

java --module-path my-mod.jar:ivy-2.4.0.jar -m my.mod 

जब मैं आवेदन चलाने के लिए, यह ठीक काम करता है, तो पुस्तकालय करने की कोशिश नहीं कर रहा है उस संसाधन को लोड करें ... लेकिन यदि ऐसा होता है, तो यह उस संसाधन पर NullPointerException प्राप्त करता है जो संसाधन का उपयोग करने का प्रयास करता है।

मैं देख सकता हूं कि संसाधन जार फ़ाइल में सही पथ में मौजूद है।

मैं दोनों के रूप में एक जार (ऊपर दिखाया गया है) और बस वर्ग फाइलों के साथ अपने आवेदन चल रहा है की कोशिश की है:

java --module-path modules-dir:ivy-2.4.0.jar -m my.module/my.Main 

उत्तरार्द्ध मामले में, त्रुटि अलग है, लेकिन संबंधित है: आइवी नहीं कर सकते यहां तक ​​कि एक प्रॉपर्टी फ़ाइल भी ढूंढें जो इसे अपने जार से लोड करने का प्रयास करती है!

क्या कोई कामकाज है, क्या यह ज्ञात बग है, या क्या मैं कुछ गलत कर रहा हूं?

+0

आपको जावा 9 कहां मिला? क्या इसे जारी किया गया है? 2017 06 15 –

+2

[एसडीकेएमएएन] प्राप्त करें (http://sdkman.io/) और 'sdk install java 9ea167' के साथ स्थापित करें। यह एक ईए (प्रारंभिक पहुंच) संस्करण है। – Renato

+0

बस सवाल नहीं मिल सका, my.mod मॉड्यूल फ़ाइल के साथ my-mod.jar का रिश्ता क्या है? क्या आप चाहते हैं कि मेरा-mod.jar आईवी-2.4.0.jar पर निर्भर करे? – chebus

उत्तर

2

स्वचालित मॉड्यूल 'ivy' में 'खुलता' घोषणा जोड़ने का प्रयास करें। इससे इसके संसाधनों तक पहुंच की अनुमति मिलती है:

java --add-opens ivy/<dot.separated.path.to.resources>=ALL-UNNAMED --module-path my-mod.jar:ivy-2.4.0.jar -m my.mod 
+0

'ऑल-यूएनएनएनडीडी' मुझे लगता है कि यहां 'my.mod' हो सकता है। मैंने [उत्तर दिया था] (https://stackoverflow.com/a/46891860/1746118) एक संबंधित प्रश्न जो संसाधनों के संदर्भ में उलटा करता है, जहां मैंने [encapsulation strategy] को जोड़ा है (https://docs.oracle संसाधनों के .com/javase/9/docs/api/java/lang/module.html # getResourceAsStream-java.lang.String-)। आप इसका भी उपयोग कर सकते हैं। 'Dot.separated.path.to.resources' के संदर्भ में उत्तर में मूल्य जोड़ देगा। – nullpointer

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