2017-11-03 10 views
5

मैं जावा 9 में नई मॉड्यूलर सुविधाओं के संपर्क में आने के लिए इस Github project का उपयोग कर रहा हूं। मैं प्रोजेक्ट पर निर्भरता जोड़ना चाहता हूं और मूल छवि बनाने में सक्षम होना चाहता हूं। हालांकि, जब मैं pom.xml के लिए एक नया निर्भरता जोड़ते हैं, और जोड़ने module-info.java के बयान की आवश्यकता करने की कोशिश, मैं एक निम्न त्रुटि Maven-jlink-प्लगइन से मिलता है:क्या मैवेन-जलिंक-प्लगइन का उपयोग करते समय मेवेन निर्भरताओं को जोड़ने का कोई तरीका है?

Error: module-info.class not found for joda.time module 

मैं इस अवधारणा के सबूत के रूप में इसका उपयोग करने की कोशिश कर रहा हूं कि मैं नए लिंकिंग चरण का उपयोग करके छवियों को तैनात कर सकता हूं, लेकिन स्वाभाविक रूप से मुझे बाहरी निर्भरताओं को प्राप्त करने में सक्षम होना चाहिए और मुझे मेवेन (कार्य बाधा) का उपयोग करने की आवश्यकता है।

आधुनिक-जार/pom.xml

... 
<dependencies> 
    <dependency> 
     <groupId>joda-time</groupId> 
     <artifactId>joda-time</artifactId> 
     <version>2.9.9</version> 
    </dependency> 
    </dependencies> 
... 

आधुनिक-जार/module-info.java

module com.soebes.nine.jar { 
    requires java.base; 
    requires joda.time; 
    exports com.soebes.example.nine.jar; 
} 

लॉग्स में परिवर्तन:

[INFO] --- maven-jlink-plugin:3.0.0-alpha-1:jlink (default-jlink) @ mod-jlink --- 
[INFO] Toolchain in maven-jlink-plugin: jlink [ /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/bin/jlink ] 
[INFO] The following dependencies will be linked into the runtime image: 
[INFO] -> module: com.soebes.nine.one (/Users/sebastianrestrepo/Projects/jdk9-jlink-jmod-example/maven-example/mod-1/target/jmods/com.soebes.nine.one.jmod) 
[INFO] -> module: com.soebes.nine.two (/Users/sebastianrestrepo/Projects/jdk9-jlink-jmod-example/maven-example/mod-2/target/jmods/com.soebes.nine.two.jmod) 
[INFO] -> module: com.soebes.nine.jar (/Users/sebastianrestrepo/Projects/jdk9-jlink-jmod-example/maven-example/mod-jar/target/com.soebes.nine.jar-1.0-SNAPSHOT.jar) 
[INFO] -> module: joda.time (/Users/sebastianrestrepo/.m2/repository/joda-time/joda-time/2.9.9/joda-time-2.9.9.jar) 
[ERROR] 
Error: module-info.class not found for joda.time module 
[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Summary: 
[INFO] 
[INFO] parent ............................................. SUCCESS [ 1.460 s] 
[INFO] com.soebes.nine.one ................................ SUCCESS [ 2.022 s] 
[INFO] com.soebes.nine.two ................................ SUCCESS [ 1.392 s] 
[INFO] com.soebes.nine.jar ................................ SUCCESS [ 1.388 s] 
[INFO] mod-jlink .......................................... FAILURE [ 1.061 s] 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 7.911 s 
[INFO] Finished at: 2017-11-03T15:27:35-04:00 
[INFO] Final Memory: 26M/981M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jlink-plugin:3.0.0-alpha-1:jlink (default-jlink) on project mod-jlink: 

मैं वास्तव में किसी भी सराहना करेंगे मदद। धन्यवाद।

+0

लॉग Maven-उदाहरण निर्देशिका – srestrepo

उत्तर

8

इसमें not much to do with the plugin I believe है। आपके मामले में मॉड्यूल joda.time एक स्वचालित मॉड्यूल प्रतीत होता है।

jlink tool does not support linking of automatic modules क्योंकि वे क्लासपाथ की मनमानी सामग्री पर भरोसा कर सकते हैं, जो स्वयं निहित जावा रनटाइम के विचार के विरुद्ध जाता है।

तो वहाँ शायद इसे ठीक करने के दो तरीके हैं: -

  • (आप जार के स्वामी नहीं हैं) को अस्थायी रूप से आगे जाना एक module-info.java [आप कर सकते थे इसके लिए use jdeps tool] बना सकते हैं और अद्यतन जार [का उपयोग कर jar उपकरण] जावा 9.

  • (आप निर्भरता के मालिक हैं) को स्थायी रूप से जावा 9 ही है, जहां यह संकलित और पैक किए जाने के बाद से ही module-info.class को मिलाकर होगा करने के लिए जार की ओर पलायन के तहत परियोजनाओं में के रूप में इसी संकलित वर्ग के साथ।

+2

में mvn साफ पैकेज चल हालांकि मैं रेपो आप कुछ के साथ आने के लिए क्लोन वह पहले से ही एक ही पर काबू पाने की कोशिश की है के मालिक का इंतजार होगा से कर रहे हैं। [@khmarbaise] (https://stackoverflow.com/users/296328/khmarbaise) – nullpointer

+0

त्वरित प्रतिक्रिया के लिए धन्यवाद। मुझे मौजूदा जार में 'मॉड्यूल-info.java' जोड़ने में कुछ समस्याएं आ रही हैं। मैं जार फ़ाइल को जार में जोड़ सकता हूं, लेकिन मुझे लगता है कि मुझे इसे .class फ़ाइल होने की आवश्यकता है। हालांकि, मैं मॉड्यूल-info.java फ़ाइल को संकलित नहीं कर सकता क्योंकि संकलक कह रहा है कि 'org.joda.time' मौजूद नहीं है। कोई सुझाव? – srestrepo

+5

मॉड्यूल-info.java संकलित करने के लिए आपको JAR की सामग्री को निर्देशिका में निकालने की आवश्यकता है। फिर मॉड्यूल-info.java को आउटपुट निर्देशिका (-d) के साथ संकलित करें जहां आपने सामग्री निकाली है। इसे एक जेएआर फ़ाइल के लिए करना जो आप बनाए नहीं रखते हैं, निश्चित रूप से थोड़ा अनकॉल है, पुस्तकालय के रखरखाव को एक स्पष्ट मॉड्यूल में माइग्रेट करने के लिए बेहतर है। –

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

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