2017-11-23 40 views
5

प्रश्न पर मॉड्यूल jdk.incubator.httpclient दिखाई बनाना

मैं कैसे मॉड्यूल jdk.incubator.httpclient से कक्षाएं कार्यावधि में दृश्यमान बना सकते हैं?क्रम

क्या मैं

जावा 9 + Maven + HttpClient jdk.incubator.http.HttpClient

समस्याएं

=> Maven जब jdk.incubator.HttpClient का उपयोग कर में नाकाम रहने के निर्माण का उपयोग कर रहा हूँ। फिक्स्डthis question साथ धन्यवाद

=> रनटाइम स्टैकट्रेस @nullpointer रहे हैं:

java.lang.NoClassDefFoundError: jdk/incubator/http/HttpClient 
at com.foo.Bar.Bar.<clinit>(Bar.java:56) ~[?:?] 
at java.lang.Class.forName0([email protected]/Native Method) ~[?:?] 
at java.lang.Class.forName([email protected]/Class.java:374) ~[?:?] 
Caused by: java.lang.ClassNotFoundException: jdk.incubator.http.HttpClient 
at java.net.URLClassLoader.findClass([email protected]/URLClassLoader.java:388) ~[?:?] 
at java.lang.ClassLoader.loadClass([email protected]/ClassLoader.java:486) ~[?:?] 
at java.lang.ClassLoader.loadClass([email protected]/ClassLoader.java:419) ~[?:?] 
at com.foo.Bar.Bar.<clinit>(Bar.java:56) ~[?:?] 
at java.lang.Class.forName0([email protected]/Native Method) ~[?:?] 
at java.lang.Class.forName([email protected]/Class.java:374) ~[?:?] 

पोम

<build> 
    <finalName>${project.artifactId}</finalName> 
    <sourceDirectory>${project.basedir}/src</sourceDirectory> 

    <resources> 
     <resource> 
      <targetPath>.</targetPath> 
      <filtering>true</filtering> 
      <directory>${project.basedir}/resources</directory> 

      <includes> 
       <include>plugin.yml</include> 
      </includes> 
     </resource> 
    </resources> 

    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-clean-plugin</artifactId> 
      <version>3.0.0</version> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.7.0</version> 

      <configuration> 
       <source>9</source> 
       <target>9</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>3.1.0</version> 

      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <minimizeJar>true</minimizeJar> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

आप देख सकते हैं की धारा बिल्ड, मैं अपने निर्भरता के लिए maven-shade-plugin उपयोग कर रहा हूँ, लेकिन चूंकि jdk.incubator.http.HttpClient जेडीके का हिस्सा है, यह मेरे जार में शामिल नहीं है।

निष्पादित करने के लिए कोशिश कर रहा है के रूप में: निम्न अपवाद में

java -jar --add-modules jdk.incubator.httpclient uhc-staging.jar 

परिणाम:

Error occurred during initialization of VM 
java.lang.module.ResolutionException: Module jdk.incubator.httpclient not found 
at java.lang.module.Resolver.fail([email protected]/Resolver.java:790) 
at java.lang.module.Resolver.resolveRequires([email protected]/Resolver.java:94) 
at java.lang.module.Configuration.resolveRequiresAndUses([email protected]/Configuration.java:370) 
at java.lang.module.ModuleDescriptor$1.resolveRequiresAndUses([email protected]/ModuleDescriptor.java:1986) 
at jdk.internal.module.ModuleBootstrap.boot([email protected]/ModuleBootstrap.java:263) 
at java.lang.System.initPhase2([email protected]/System.java:1927) 
+0

-: इसलिए, इस का हल JDK संस्करण नवीनतम रिलीज (जो इनक्यूबेटर मॉड्यूल शामिल होना चाहिए) करने के लिए स्थापित उन्नयन किया जाएगा और उसके बाद ही आदेश का उपयोग एप्लिकेशन चलाने का प्रयास के रूप में सुझाव एक एडन के रूप में प्रयोग किया जाता है। एक विधि 'सक्षम() 'है जिसे मुख्य प्रक्रिया सक्षम करने पर सक्षम कहा जाता है। मुख्य प्रक्रिया के लिए 'java -jar server.jar' –

+0

@nullpointer के साथ शुरू की गई एक और जार फ़ाइल बहुत संक्षिप्त होने के लिए खेद है। मेरा जार एपी बुक्किट के लिए एक प्लगइन के रूप में प्रयोग किया जाता है। जब बुक्किट सर्वर शुरू होता है, तो यह मेरे सहित सभी प्लगइन लोड करता है, और 'सक्षम()' विधि को कॉल करता है। मेरी सक्षम विधि में मैं उपयोगकर्ता एपीआई पर कुछ जानकारी लोड करने के लिए एचटीपी क्लाइंट के साथ अपने एपीआई को कॉल करके शुरू करता हूं। –

+0

आदर्श रूप से आपको वर्तमान जार के एकीकरण भाग के साथ बुक्किट और वहां इस्तेमाल किए गए कोड के साथ प्रश्न को अद्यतन करना चाहिए। [हालांकि, ईमानदारी से मुझे यह पता नहीं है कि बुक्किट कैसे काम करता है।] – nullpointer

उत्तर

3

discussion में, विस्तार से बाहर लाया कि क्रियान्वित था: -

java --list-modules 

में मॉड्यूल के रूप में jdk.incubator.httpclient शामिल नहीं है, यही कारण है कि j.l.m.ResolutionException फेंक दिया गया है। जार @nullpointer

java -jar --add-modules jdk.incubator.httpclient uhc-staging.jar 
+0

इस पर विस्तार करने के लिए, मेरे पास उबंटू 16.10 पर 'openjdk-9-jdk' पैकेज था, जो अब उबंटू का समर्थित संस्करण नहीं है। 17.04 को अपग्रेड करने से मुझे 'ऑरैक-जावा 9-इंस्टॉलर' पैकेज स्थापित करने की इजाजत मिली जो 16.10 के साथ स्थापित करने में विफल रही थी। चूंकि 'openjdk-9-jdk' पैकेज इनक्यूबेटर मॉड्यूल के साथ नहीं आता है, '--add-modules jdk.incubator.httpclient' का उपयोग करके काम नहीं करेगा। 'ऑरैक-जावा 9-इंस्टॉलर' का उपयोग करके और '-add-modules jdk.incubator.httpclient' के साथ जार चलाने से समस्या को हल किया गया –

+0

इसके अलावा, कमांड लाइन पर' -add-modules' का उपयोग करने से बचने के लिए। किसी को [मॉडस्टपैथ का उपयोग करके किसी अन्य उत्तर में विस्तृत रूप से निष्पादित करना होगा] (https://stackoverflow.com/a/47468106/1746118)। – nullpointer