web-dev-qa-db-ja.com

Mavenで単純なJava 10/Java 11プロジェクトをコンパイルできません

私は簡単なMavenプロジェクトを持っています。

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

これを修正する方法はありますか?

101
ZhekaKozlov

更新

答えは現在時代遅れです。 この答え を参照してください。


maven-compiler-pluginは、Java 10(およびJava 11)をまだサポートしていない古いバージョンのASMに依存します。ただし、正しいバージョンの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

122
ZhekaKozlov

あるいは、上記の問題を修正するために2018年7月30日の時点で、maven内で使用されるJavaバージョンをJDK/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]

実際、JDK/12に対してコードをコンパイルしながら、同じバージョンのmaven-compiler-pluginを使用することもできます。

Mavenを使用してJDK12プレビュー機能をコンパイルする の詳細と設定例.

118
Naman

あなたのmaven-compiler-pluginを3.8.0に上げることは必要なようですが十分ではないようです。それでも問題が解決しない場合は、コマンドラインから実行している場合は、Java_HOME環境変数がJava 10(または11)に設定されていることも確認する必要があります。 IDEから実行している場合は、現在のJDKでmavenを実行するように設定されていることを確認する必要があります。

19
MiguelMunoz

まったく同じエラーではないかもしれませんが、私は同じようなエラーがありました。

Maven Javaのバージョンを確認します

MavenはJavaでも動作するので、まずMavenがどのバージョンで動作しているか確認してください。

mvn --version | grep Java 

それは戻ります:

Javaバージョン1.8.0_151、ベンダー:Oracle Corporation、ランタイム:C:\ tools\jdk\openjdk1.8

非互換バージョン

上記の私のMavenはJava Version 1.8.0_151で動作しています。 Java 11でコンパイルするようにmavenを指定したとしても:

<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-plugin:3.8.0:プロジェクトefa-example-commons-taskでコンパイル(デフォルト - コンパイル):致命的なエラーコンパイル:無効なターゲットリリース:11 - > [ヘルプ1]

特定のJavaバージョンをMavenに設定する方法

論理的に行うべきことは、より高いJavaバージョンをMavenに設定することです(たとえば、1.8ではなくJavaバージョン11)。

Mavenは実行するJavaのバージョンを見つけるために環境変数Java_HOMEを利用します。そのため、この変数をコンパイルしたいJDK(OpenJDK 11など)に変更してください。

サニティーチェック

それからmvn --versionをもう一度実行して、設定が正しく行われたことを確認します。

λmvn - バージョン| grep Java Javaのバージョン:11.0.2、製造元:Oracle Corporation、ランタイム:C:\ tools\jdk\openjdk11

Java 11の仕様で書かれたコードをコンパイルする方がはるかに優れていて正しいです。

1
KeyMaker00

Maven.compiler.sourceとターゲットのバージョンを指定します。

1)jdkに対応したMaven版をお使いください。私の場合はJDK 11とmaven 3.6.0です。

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)IDEのコンパイルエラーを避けるためにプロジェクトを再ビルドしてください。

4)それでも解決しない場合Intellij Ideaでは、OSの端末を使用するよりも端末を使用することを好みます。その後、Ideaでファイル - >設定 - >ビルドツール - > mavenに行きます。私はApacheからダウンロードしたmavenを使っています(デフォルトではIdeaはバンドルされたmavenを使っています)。その後、Ideaを再起動してmvn clean installをもう一度実行してください。また、 Path MAVEN_HOME Java_HOME /の各環境変数が正しいことを確認してください。

私もこのワンライナーを見ましたが、うまくいきません。

<maven.compiler.release>11</maven.compiler.release>
0
Yan Khonski