2017-11-10 30 views
7

मान लीजिए कि मेरे पास कुछ लाइब्रेरी lib.jar है जिसके लिए मेरे पास स्रोत कोड नहीं है (या यह कुछ गैर-जावा भाषा में लिखा गया है जो अभी तक मॉड्यूल से अनजान है)। lib.jar में module-info.class नहीं है और मैं इसे स्वचालित मॉड्यूल के रूप में उपयोग नहीं करना चाहता, इसलिए मैं इसमें module-info.class इंजेक्ट करना चाहता हूं।जार में मॉड्यूल घोषणा कैसे इंजेक्ट करें?

मैं पहली बार निम्न आदेश के साथ module-info.java उत्पन्न:

jdeps --generate-module-info . lib.jar 

इस ऐसा ही कुछ उत्पन्न मान लीजिए:

module lib { 
    exports package1; 
    exports package2; 
} 

तो मैं यह संकलन करने की कोशिश लेकिन javac विफल रहता है क्योंकि संकुल package1 और package2 करना अस्तित्व में नहीं है:

> javac module-info.java 
module-info.java:4: error: package is empty or does not exist: package1 

बेशक, मैं निर्देशिका में package1 और package2 निर्देशिका बना सकता हूं, लेकिन क्या वहां कुछ बेहतर दृष्टिकोण है?

उत्तर

6

हां, यह --patch-module विकल्प के साथ संभव है। यह विकल्प सबसे अधिक बार कार्यावधि में प्रयोग किया जाता है, लेकिन यह भी संकलन समय पर काम करता है:

javac --patch-module <module name>=<path to jar> module-info.java 
+0

जब मैं इस आदेश का उपयोग करें, मैं अभी भी त्रुटि मिलती है: > javac module-info.java module-info.java:4: त्रुटि: पैकेज खाली है या मौजूद नहीं है : पैकेज 1 कोई विचारधारा क्यों यह मेरे लिए काम नहीं कर सकती है? –

+0

@TiagoSantos क्या पैकेज JAR में मौजूद है? – ZhekaKozlov

+0

हाँ, सबकुछ ठीक लगता है, मैं इसे नलपॉइंटर से ऊपर दिए गए समाधान का उपयोग करके काम करने में कामयाब रहा, मैं मानता हूं कि आपका समाधान अधिक सुरुचिपूर्ण है, केवल समस्या यह है कि मेरे .jars के साथ काम नहीं कर रहा है:/2 अलग-अलग प्रयासों में –

5

वैकल्पिक रूप से, module-info.java उत्पन्न आप भी एक निर्देशिका में जार की सामग्री को निकालने के लिए की जरूरत को संकलित करने के।

फिर आउटपुट निर्देशिका (-d) के साथ module-info.java संकलित करें जहां आपने सामग्री निकाली है।

Credits :- Alan

+1

धन्यवाद, मैं इस दृष्टिकोण – ZhekaKozlov

+1

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

+0

@ZhekaKozlov मैं सहमत हूं, यह वास्तव में साफ है। मुझे आशा है कि मुझे इसे एक या तो नहीं हटाया जाना चाहिए।;) – nullpointer

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