मावेन के साथ सरल जावा 10 / जावा 11 परियोजना को संकलित करने में असमर्थ


134

मेरे पास एक तुच्छ मावेन परियोजना है:

src
└── main
    └── java
        └── module-info.java
pom.xml

pom.xml:

<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>example</name>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <release>10</release>
            </configuration>
        </plugin>
    </plugins>
</build>

जब मैं प्रोजेक्ट का निर्माण करता हूं mvn -X install -DskipTests=true, तो यह विफल हो जाता है:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile (default-testCompile) on project example: Execution default-testCompile of goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile failed.
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:993)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:191)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-testCompile of goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile failed.
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:145)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
        ... 20 more
Caused by: java.lang.IllegalArgumentException
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.codehaus.plexus.languages.java.jpms.AsmModuleInfoParser.parse(AsmModuleInfoParser.java:80)
        at org.codehaus.plexus.languages.java.jpms.AsmModuleInfoParser.getModuleDescriptor(AsmModuleInfoParser.java:54)
        at org.codehaus.plexus.languages.java.jpms.LocationManager.resolvePaths(LocationManager.java:83)
        at org.apache.maven.plugin.compiler.TestCompilerMojo.preparePaths(TestCompilerMojo.java:281)
        at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:762)
        at org.apache.maven.plugin.compiler.TestCompilerMojo.execute(TestCompilerMojo.java:176)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
        ... 21 more

क्या इसे ठीक करने का कोई तरीका है?


1
@MikhailKholodkov बग को हल कर दिया गया है और एक अब उपरोक्त त्रुटि को ठीक करने के लिए उपयोगmaven-compiler-plugin:3.8.0 कर सकता है ।
नमन

जवाबों:


162

उपरोक्त मुद्दे को ठीक करने के लिए 30 जूल, 2018 तक, जेवीके / 11 तक मावेन के भीतर उपयोग किए गए जावा संस्करण को कॉन्फ़िगर कर सकते हैं और किसी भी स्पष्ट निर्भरता के बिनाmaven-compiler-plugin:3.8.0 या तो 9,10,11 की रिहाई को निर्दिष्ट करने के लिए उपयोग कर सकते हैं ।

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>11</release>  <!--or <release>10</release>-->
    </configuration>
</plugin>

नोट : - स्रोत / लक्ष्य के लिए डिफ़ॉल्ट मान को इस संस्करण के साथ 1.5 से 1.6 कर दिया गया है। - नोट जारी करें।


संपादित करें [30.12.2018]

वास्तव में, आप maven-compiler-pluginJDK / 12 के साथ ही कोड संकलित करते समय एक ही संस्करण का उपयोग कर सकते हैं ।

अधिक विवरण और मावेन के साथ JDK पूर्वावलोकन सुविधा को संकलित करने और निष्पादित करने के तरीके में एक नमूना विन्यास ।


6
यह केवल बॉक्स से बाहर काम करता है जब जावा 11 के साथ मावेन को निष्पादित किया जाता है। यदि आपका प्लेटफ़ॉर्म जावा संस्करण उदाहरण के लिए जावा 8 है (और इसलिए मावेन
फ्रांज डेस्क्लर

8
ध्यान दें कि संबंधित संपत्ति है maven.compiler.release:<properties><maven.compiler.release>11</maven.compiler.release></properties>
ओलिवियर ग्रेजायर

@ OlivierGrégoire - तो, ​​हम आपके द्वारा दिए गए इस कोड को बदल सकते हैं? <गुण> <maven.compiler.target> 1.8 </maven.compiler.target> <maven.compiler.source> 1.8 </maven.compiler.source> </ गुण>
MasterJoe

1
@ MasterJoe2 हां, आपको ऐसा करने में सक्षम होना चाहिए, बशर्ते आप Java-11 में अपग्रेड कर रहे हों।
नमन

136

अपडेट करें

उत्तर अब अप्रचलित है। इस जवाब को देखें ।


maven-compiler-pluginएएसएम के पुराने संस्करण पर निर्भर करता है जो अभी तक जावा 10 (और जावा 11) का समर्थन नहीं करता है। हालांकि, ASM के सही संस्करण को स्पष्ट रूप से निर्दिष्ट करना संभव है:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.7.0</version>
    <configuration>
        <release>10</release>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm</artifactId>
            <version>6.2</version> <!-- Use newer version of ASM -->
        </dependency>
    </dependencies>
</plugin>

आप https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm&core=gav पर नवीनतम पा सकते हैं


क्या आप अपने पोस्ट की शुरुआत में प्रस्तावित उत्तर को बदलने पर विचार करेंगे?
तेंदुए

24

अपने मावेन-कंपाइलर-प्लगइन को 3.8.0 तक बढ़ाना आवश्यक प्रतीत होता है, लेकिन पर्याप्त नहीं है। यदि आपको अभी भी समस्या हो रही है, तो आपको यह भी सुनिश्चित करना चाहिए कि यदि आप कमांड लाइन से भाग रहे हैं तो आपका JAVA_HOME पर्यावरण चर जावा 10 (या 11) पर सेट है। (आपको मिलने वाला त्रुटि संदेश आपको यह नहीं बताएगा।) या यदि आप एक आईडीई से चल रहे हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि यह आपके वर्तमान जेडीके के साथ मावेन चलाने के लिए सेट है।


14

यह वास्तव में एक ही त्रुटि नहीं हो सकती है, लेकिन मेरे पास एक समान थी।

जावेद जावा संस्करण की जाँच करें

चूंकि मावेन जावा के साथ रननिग भी है, इसलिए पहले जांचें कि आपका मावेन किस संस्करण पर चल रहा है:

mvn --version | grep -i java 

यह रिटर्न:

Java संस्करण 1.8.0_151, विक्रेता: Oracle Corporation, रनटाइम: C: \ tools \ jdk \ openjdk1.8

असंगत संस्करण

यहाँ ऊपर मेरे मावेन के साथ चल रहा है Java Version 1.8.0_151 । यहां तक ​​कि अगर मैं साथ संकलन करने के लिए मावेन निर्दिष्ट करता हूं Java 11:

<properties>
    <java.version>11</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

यह तार्किक रूप से इस त्रुटि का प्रिंट आउट लेगा:

[ERROR] लक्ष्य को निष्पादित करने में विफल हुआ। org.apache.maven.plugins: maven-compiler-plugin: 3.8.0: compile (default-compile) प्रोजेक्ट efa-example-commons-task पर: त्रुटि त्रुटि संकलन: अमान्य लक्ष्य रिलीज़: 11 -> [सहायता 1]

मावेन के लिए विशिष्ट जावा संस्करण कैसे सेट करें

तार्किक बात यह है कि मावेन के लिए एक उच्च जावा संस्करण सेट करना है (उदाहरण के लिए 1.8 के बजाय जावा संस्करण 11)।

JAVA_HOMEजावा संस्करण को चलाने के लिए मावेन पर्यावरण चर का उपयोग करता है। इसलिए इस वैरिएबल को उस JDK में बदलें जिसे आप संकलित करना चाहते हैं (जैसे OpenJDK 11)।

मानसिक स्वास्थ्य की जांच

फिर mvn --versionसुनिश्चित करने के लिए चलाएं कि कॉन्फ़िगरेशन का ध्यान रखा गया है:

mvn --version | grep -i java

पैदावार

Java संस्करण: 11.0.2, विक्रेता: Oracle Corporation, क्रम: C: \ tools \ jdk \ openjdk11

जावा 11 विनिर्देशों के साथ लिखे गए कोड को संकलित करने के लिए कौन सा बेहतर और सही है।


1
यह मेरे लिए भी काम किया, जब
मावेन

13

Maven.compiler.source और लक्ष्य संस्करणों को निर्दिष्ट करें।

1) मावेन संस्करण जो आपके द्वारा उपयोग किए जाने वाले jdk का समर्थन करता है। मेरे मामले में जेडीके 11 और मावेन 3.6.0।

2) pom.xml

<properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
</properties>

एक विकल्प के रूप में, आप मावेन कंपाइलर प्लगइन को पूरी तरह से निर्दिष्ट कर सकते हैं। पिछले जवाब देखें। यह मेरे उदाहरण में छोटा है :)

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>11</release>
            </configuration>
        </plugin>
    </plugins>
</build>

3) अपने आईडीई में संकलित त्रुटियों से बचने के लिए परियोजना का पुनर्निर्माण करें।

4) अगर यह अभी भी काम नहीं करता है। इंटेलीज आइडिया में मैं ओएस से टर्मिनल का उपयोग करने के बजाय टर्मिनल का उपयोग करना पसंद करता हूं। फिर आइडिया में फाइल -> सेटिंग्स -> बिल्ड टूल्स -> मावेन पर जाएं। मैं मावेन के साथ काम करता हूं जिसे मैं अपाचे से डाउनलोड करता हूं (डिफ़ॉल्ट रूप से आइडिया बंडल किए गए मावेन का उपयोग करता है)। आइडिया को फिर से शुरू करें और mvn clean installफिर से चलाएं । यह भी सुनिश्चित करें कि आपके पास सही पथ है , MAVEN_HOME , JAVA_HOME वातावरण चर हैं।

मैंने इस एक-लाइनर को भी देखा, लेकिन यह काम नहीं करता है।

<maven.compiler.release>11</maven.compiler.release>

मैंने कुछ त्वरित स्टार्टर परियोजनाएं बनाईं, जिन्हें मैं अपनी अन्य परियोजनाओं में फिर से उपयोग करता हूं, मुफ्त में जांच करें:


2

यदि आप स्प्रिंग बूट का उपयोग कर रहे हैं तो इन टैग्स को pom.xml में जोड़ें।

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

तथा

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    `<maven.compiler.release>`10</maven.compiler.release>
</properties>

आप जावा संस्करण को 11 या 13 के साथ-साथ <maven.compiler.release>टैग में भी बदल सकते हैं ।

बस नीचे pom.xml में टैग जोड़ें

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.release>11</maven.compiler.release>
</properties>

आप जावा संस्करण को बदलने के लिए 11 से 10, 13 बदल सकते हैं। मैं जावा 13 का उपयोग कर रहा हूं जो नवीनतम है। इससे मेरा काम बनता है।


0

ठीक है, इसलिए मेरे लिए कुछ भी काम नहीं किया।
मैं के साथ वसंत बूट का उपयोग कर रहा था हाइबरनेट के । स्प्रिंग बूट संस्करण ~ 2.0.1 था और मुझे संकलन पर यह त्रुटि और अशक्त सूचक अपवाद मिलेगा। मुद्दा हाइबरनेट के साथ था जिसे एक संस्करण टक्कर की आवश्यकता थी। लेकिन उसके बाद मेरे पास कुछ अन्य मुद्दे थे जो ऐसा लगता था कि एनोटेशन प्रोसेसर को मान्यता नहीं दी गई थी इसलिए मैंने 2.0.1 से 2.1.7-रिलीज़ तक बस वसंत को टक्कर देने का फैसला किया और सब कुछ उम्मीद के मुताबिक काम किया।

आपको अभी भी उपरोक्त प्लगइन को जोड़ने की आवश्यकता है कठिन
आशा है कि यह मदद करता है!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.