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


134

ささいな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

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


回答:


162

上記の問題を修正するために、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]

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

MavenでJDKプレビュー機能コンパイルおよび実行する方法の詳細とサンプル構成。


6
これは、mavenがJava 11で実行される場合にのみ機能します。プラットフォームのJavaバージョンがJava 8である場合(したがって、mavenがJava 8で実行される場合)、ツールチェーンmaven.apache.org/guides/mini
Franz Deschler

8
関連するプロパティがあることに注意してくださいmaven.compiler.release<properties><maven.compiler.release>11</maven.compiler.release></properties>
オリヴィエ・グレゴワール

@OlivierGrégoire-したがって、このコードを指定したコードに置き換えることができますか?<properties> <maven.compiler.target> 1.8 </maven.compiler.target> <maven.compiler.source> 1.8 </maven.compiler.source> </ properties>
MasterJoe

1
@ MasterJoe2はい、Java-11にアップグレードしている場合は、それを実行できるはずです。
ナマン

136

更新

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


maven-compiler-pluginJava 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にあります。


承認された回答を、投稿の冒頭で提案された回答に変更することを検討しますか?
ヒョウ

24

maven-compiler-pluginを3.8.0にブーストする必要があるようですが、十分ではありません。それでも問題が解決しない場合、コマンドラインから実行している場合は、JAVA_HOME環境変数がJava 10(または11)に設定されていることを確認する必要もあります。(表示されるエラーメッセージではわかりません。)または、IDEから実行している場合は、現在のJDKでMavenを実行するように設定されていることを確認する必要があります。


14

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

Maven Javaバージョンの確認

MavenもJavaで実行されるため、Mavenが実行されているバージョンを最初に確認します。

mvn --version | grep -i java 

それは返します:

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

互換性のないバージョン

ここで、私のmavenはで実行されていJava Version 1.8.0_151ます。だから私がコンパイルするためにmavenを指定したとしても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>

このエラーは論理的に出力されます。

[エラー]プロジェクトefa-example-commons-taskでゴールorg.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile(default-compile)を実行できませんでした:致命的なエラーコンパイル:無効なターゲットリリース:11 -> [ヘルプ1]

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

論理的なことは、より高いJavaバージョンをMavenに設定することです(例:1.8ではなくJavaバージョン11)。

Mavenは、JAVA_HOME実行するJavaバージョンを見つけるために環境変数を利用します。したがって、この変数をコンパイルするJDKに変更します(例:OpenJDK 11)。

サニティーチェック

次に、もう一度実行しmvn --versionて、構成が処理されていることを確認します。

mvn --version | grep -i java

収量

Javaバージョン:11.0.2、ベンダー:Oracle Corporation、ランタイム:C:\ tools \ jdk \ openjdk11

これは、Java 11仕様で記述されたコードをコンパイルするのにはるかに優れた正しい方法です。


1
Mavenのアセンブリ・プラグインのバージョン3.2.0使用する場合にも、私のために働いた
ジェラールBinkhorst

13

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からターミナルを使用するよりもターミナルを使用することを好みます。次に、アイデアでファイル->設定->ビルドツール-> mavenに移動します。私はapacheからダウンロードしたmavenを使用します(デフォルトではIdeaはバンドルされたmavenを使用します)。その後、Ideaを再起動してmvn clean install再度実行してください。また、正しいパスMAVEN_HOMEJAVA_HOMEがあることを確認してください環境変数。

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

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

いくつかのクイックスタータープロジェクトを作成しました。他のプロジェクトで再利用します。自由に確認してください。


2

Spring Bootを使用している場合は、これらのタグを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>

<maven.compiler.release>タグでjavaバージョンを11または13に変更することもできます。

以下のタグを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に変更して、Javaバージョンを変更することもできます。最新のjava 13を使用しています。わたしにはできる。


0

申し分なく、私にとっては何もうまくいきませんでした。
私は春のブーツ使っていました休止状態でていました。スプリングブートのバージョンは〜2.0.1で、コンパイル時にこのエラーとnullポインタ例外が発生し続けました。問題は、バージョンのバンプが必要な休止状態に関するものでした。しかしその後、注釈プロセッサが認識されないような他の問題が発生したため、2.0.1から2.1.7リリースにスプリングをバンプすることを決定し、すべてが期待どおりに機能しました。

それでも、上記のプラグインを追加する必要があり
ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.