মাভেনের সাথে সাধারণ জাভা 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
@ মিখাইলখোলডককভ বাগটি সমাধান করা হয়েছে এবং উপরের ত্রুটিটি সমাধানের জন্যmaven-compiler-plugin:3.8.0 এখন কেউ এর ব্যবহার করতে পারে
নমন

উত্তর:


162

উপরের ইস্যুটি ঠিক করার জন্য ৩০ জুলাই, ২০১ of পর্যন্ত, কেউ জেডিকে / ১১ অবধি যেকোনওর জন্য ম্যাভেনের মধ্যে ব্যবহৃত জাভা সংস্করণটি কনফিগার করতে পারে এবং কোনও স্পষ্ট নির্ভরতা ছাড়াই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-pluginজেডিকে / 12 এর বিপরীতে কোডটি সংকলনের সময় একই সংস্করণটি ব্যবহার করতে পারেন ।

মাভেনের সাথে জেডিকে প্রিভিউ বৈশিষ্ট্যটি কীভাবে সংকলন করা এবং চালানো যায় সে সম্পর্কে আরও বিশদ এবং একটি নমুনা কনফিগারেশন ।


6
মার্ভেন জাভা ১১ দিয়ে মৃত্যুদন্ড কার্যকর করা হলে এটি কেবল বাক্সের বাইরে কাজ করবে যদি আপনার প্ল্যাটফর্ম জাভা সংস্করণটি উদাহরণস্বরূপ জাভা 8 (এবং তাই জাভা 8 দিয়ে কার্যকর করা হয়), আপনাকে একটি সরঞ্জামচেন maven.apache.org/guides/mini
ফ্রাঞ্জ Deschler

8
নোট করুন যে সম্পর্কিত সম্পত্তি হ'ল maven.compiler.release:<properties><maven.compiler.release>11</maven.compiler.release></properties>
অলিভিয়ার গ্রাগোয়ার

@ অলিভিগ্রগ্রোয়ার - সুতরাং, আমরা আপনার দেওয়া কোড দিয়ে এই কোডটি প্রতিস্থাপন করতে পারি? <properties> <maven.compiler.target> 1.8 </ maven.compiler.target> <maven.compiler.source> 1.8 </ maven.compiler.source> </properties>
মাস্টারজয়ে

1
@ মাস্টারজো 2 হ্যাঁ আপনি জাভা -11 এ আপগ্রেড করার কারণে আপনি তা করতে সক্ষম হবেন।
নমন

136

হালনাগাদ

উত্তরটি এখন অচল। এই উত্তর দেখুন ।


maven-compiler-pluginASM এর পুরানো সংস্করণের উপর নির্ভর করে যা জাভা 10 (এবং জাভা 11) এখনও সমর্থন করে না। তবে এএসএমের সঠিক সংস্করণটি স্পষ্টভাবে নির্দিষ্ট করা সম্ভব:

<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 এ বুস্ট করা প্রয়োজনীয় বলে মনে হচ্ছে তবে যথেষ্ট নয়। যদি আপনার এখনও সমস্যা হয় তবে আপনার কমান্ড লাইনটি থেকে চালাচ্ছেন তবে আপনার জাভাআহোম এনভায়রনমেন্ট ভেরিয়েবলটি জাভা 10 (বা 11) এ সেট করা আছে তাও নিশ্চিত করা উচিত। (আপনি প্রাপ্ত ত্রুটি বার্তাটি এটি আপনাকে বলবে না)) বা আপনি যদি কোনও আইডিই থেকে চালাচ্ছেন তবে আপনার এটি নিশ্চিত করতে হবে এটি আপনার বর্তমান জেডিকে দিয়ে ম্যাভেন চালানোর জন্য সেট করেছে।


14

এটি ঠিক একই ত্রুটি নাও হতে পারে, তবে আমার একই রকম ছিল।

ম্যাভেন জাভা সংস্করণ পরীক্ষা করুন

যেহেতু মাভেন জাভাতেও রান্নিগ, তাই আপনার মাভেন কোন সংস্করণে চলছে তা প্রথমে পরীক্ষা করুন:

mvn --version | grep -i java 

এটি ফিরে আসে:

জাভা সংস্করণ 1.8.0_151, বিক্রেতা: ওরাকল কর্পোরেশন, রানটাইম: সি: \ সরঞ্জামগুলি \ জেডকে \ ওপেনজেডক 1.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>

এটি যৌক্তিকভাবে এই ত্রুটিটি মুদ্রণ করবে:

[ত্রুটি] org.apache.maven.plugins: maven-compiler- প্লাগইন: 3.8.0: সংকলন (ডিফল্ট-সংকলন) প্রকল্পের ইফা-উদাহরণ-কমন্স-টাস্ক: মারাত্মক ত্রুটি সংকলন: অবৈধ টার্গেট প্রকাশ: 11 -> [সহায়তা 1]

মাভেনের জন্য নির্দিষ্ট জাভা সংস্করণটি কীভাবে সেট করবেন

যৌক্তিক জিনিসটি হ'ল মাভেনের জন্য একটি উচ্চতর জাভা সংস্করণ সেট করা (উদাহরণস্বরূপ জাভা সংস্করণ ১১ এর পরিবর্তে ১.৮)।

জাভান JAVA_HOMEসংস্করণটি চালানোর জন্য পরিবেশ পরিবর্তনশীলকে মেভেন ব্যবহার করে । সুতরাং আপনি যে জেডিকে এর বিরুদ্ধে সংকলন করতে চান তাতে এই পরিবর্তনশীলটি পরিবর্তন করুন (উদাঃ ওপেনজেডকে ১১)।

বৈধতা পরীক্ষা

তারপরে mvn --versionকনফিগারেশনটির যত্ন নেওয়া হয়েছে তা নিশ্চিত করতে আবার চালান :

mvn --version | grep -i java

উৎপাদনের

জাভা সংস্করণ: ১১.০.২, বিক্রেতা: ওরাকল কর্পোরেশন, রানটাইম: সি: \ সরঞ্জামগুলি d জেডিকে \ ওপেনজেডক 11

যা জাভা 11 স্পেসিফিকেশনের সাথে লিখিত কোডটি সংকলন করতে অনেক বেশি ভাল এবং সঠিক।


1
এটি আমার জন্য কাজ করেন, যখন ম্যাভেন-সমাবেশ-প্লাগইন সংস্করণ 3.2.0 ব্যবহার
Gérard Binkhorst

13

Maven.compiler.source এবং টার্গেট সংস্করণ উল্লেখ করুন।

1) ম্যাভেন সংস্করণ যা আপনার ব্যবহার jdk সমর্থন করে। আমার ক্ষেত্রে জেডিকে ১১ এবং মেন ৩. 3..০।

2) pom.xML

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

বিকল্প হিসাবে, আপনি সম্পূর্ণরূপে maven সংকলক প্লাগইন নির্দিষ্ট করতে পারেন। পূর্ববর্তী উত্তরগুলি দেখুন। এটি আমার উদাহরণে আরও ছোট :)

<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 , জাভা_হোম পরিবেশের ভেরিয়েবল রয়েছে।

আমি এই ওয়ান-লাইনারটিও দেখেছি, তবে এটি কার্যকর হয় না।

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

আমি কিছু দ্রুত স্টার্টার প্রকল্প তৈরি করেছি, যা আমি আমার অন্যান্য প্রকল্পগুলিতে পুনরায় ব্যবহার করি, নির্দ্বিধায় চেক করতে:


2

আপনি যদি বসন্ত বুট ব্যবহার করছেন তবে এই ট্যাগগুলি পম.এক্সএমএল এ যুক্ত করুন।

<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

ঠিক আছে তাই আমার জন্য কিছুই কাজ হয়নি। হাইবারনেট সহ
আমি স্প্রিং বুট ব্যবহার করছিলাম । বসন্ত বুট সংস্করণটি ছিল ~ ২.০.১ এবং আমি এই ত্রুটিটি এবং সংকলনের পরে নাল পয়েন্টার ব্যতিক্রমটি পেতে পারি। সমস্যাটি হাইবারনেট নিয়ে ছিল যার একটি সংস্করণ বাম্প দরকার। তবে এর পরে আমার কাছে আরও কিছু সমস্যা ছিল যা দেখে মনে হয়েছিল এনোটেশন প্রসেসরটি স্বীকৃত নয় তাই আমি ঠিক করেছি ২.০.১.২ থেকে ২.১. release-রিলিজের মধ্যে বসন্তকে টুকরো টুকরো করার সিদ্ধান্ত নিয়েছি এবং সবকিছু প্রত্যাশা অনুযায়ী কাজ করেছে।

আপনি এখনও উপরোক্ত প্লাগইন শক্ত যোগ
আশা করি এটি সাহায্য করে!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.