web-dev-qa-db-ja.com

Java 9を使用している場合、maven-compiler-plugin:3.6.1:testCompileの実行に失敗しました

私は同様のエラーを伴う多くの質問があることを知っています。重複するので、Java 9でのみ発生することを考慮してください。

Java 9がインストールされています

C:\_pocs\ws_j9\Java9-http-client>Java -version
Java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)

C:\_pocs\ws_j9\Java9-http-client>echo %Java_HOME%
C:\Program Files\Java\jdk-9.0.1

例を簡単にするために、非常に簡単な例をダウンロードする場合 https://examples.javacodegeeks.com/core-Java/java-9-httpclient-example/ と私は/

mvn cleanインストールパッケージ-e

[ERROR] Failed to parse module-info:
[ERROR] With qdox: null
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.925 s
[INFO] Finished at: 2018-01-01T23:43:32+01:00
[INFO] Final Memory: 13M/44M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-compiler-plugin:3.6.1:testCompile (default-testCompile) on project http_client: Execution default-testCompile of goal org.Apache.maven.plugins:maven-compiler-plugin:3.6.1:testCompile failed: Failed to parse module-info -> [Help 1]
org.Apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.Apache.maven.plugins:maven-compiler-plugin:3.6.1:testCompile (default-testCompile) on project http_client: Execution default-testCompile of goal org.Apache.maven.plugins:maven-compiler-plugin:3.6.1:testCompile failed: Failed to parse module-info
        at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:213)

pom.xml

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.javacodegeeks.Java9</groupId>
    <artifactId>http_client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Java9HttpClient</name>
    <description>Java Http Client example</description>
    <properties>
        <Java-version>1.9</Java-version>

        <maven-compiler-plugin-version>3.6.1</maven-compiler-plugin-version>
        <maven-shade-plugin-version>3.0.0</maven-shade-plugin-version>
    </properties>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.Apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven-compiler-plugin-version}</version>
                </plugin>
                <plugin>
                    <groupId>org.Apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>${maven-shade-plugin-version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${Java-version}</source>
                    <target>${Java-version}</target>
                    <verbose>true</verbose>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                    implementation="org.Apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.javacodegeeks.Java9.http_client.Main</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

この問題の原因は少し混乱しています。これに加えて、Java 9を初めて使用しようとする人にとって少し難しくなる別の課題に直面しています。EclipseはJava 9.を正しく受け入れません。 Java 9をインストールしてみましたEclipse Oxygenのサポートをダウンロードしましたが、「リポジトリが見つかりません http://download.Eclipse.org/Eclipse/updates/none 「。そして、このmvnプラグインにJavaバージョンを9に更新させることはできません(以前はJava <1.8で正しく動作していました:

    <properties>
        <Java-version>1.9</Java-version>
...
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${Java-version}</source>
                    <target>${Java-version}</target>
                    <verbose>true</verbose>
                </configuration>
            </plugin>

これが、コマンドラインからstraichをコンパイルしようとしている理由です。

Java 9にはパッケージの整理に役立つ新しいモジュール性の概念が付属していると読みましたが、これにより問題を解決できるかどうかは非常に不満です。誰かが「モジュール情報の解析に失敗しました」と思ったのは明らかな解決策かもしれませんが、試すのに役立つものは想像できません。

私のまっすぐな質問は、コンパイルするためにチェックできるものです。 Eclipse Oxygenの現在のバージョンをJava 9と互換性があるようにすることに関する追加の秘trickも同様に評価されます。

  • 編集済み

enter image description here

24時間以内にWindows用にダウンロードされたEclipseバージョン:

Eclipse Java EE IDE Web開発者向け。

バージョン:Oxygen.2リリース(4.7.2)ビルドid:20171218-0600

  • 2回目の編集

1.9から9に変更した後、赤いエラーアイコンが消え、Java 9になりました。それにもかかわらず、このエラーが発生しました。

[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.542 s
[INFO] Finished at: 2018-01-02T05:19:30+01:00
[INFO] Final Memory: 9M/30M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project http_client: Compilation failure
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

私には意味がありません:

enter image description here

  • 3回目の編集

enter image description here

7
Jim C

つまり、module-info.Javaという名前の紛失/置き違いクラスを追加して、プロジェクトのソースルートにプロジェクトのモジュール宣言を含めます。 (例:src/main/Java

さらに、コメントがある場合は、maven-compiler-pluginのバージョン3.7.0 への アップグレードに注意してくださいmodule-info classに含まれています。 [ログはこれにかなり関連しているようです。]


または、以前のバージョンのJavaでプロジェクトをコンパイルする場合は、 release フラグを次のように使用します。

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.7.0</version>
    <configuration>
        <release>8</release>
        <verbose>true</verbose>
    </configuration>
</plugin>

コンセプト

Java9がプロジェクトの完了をマークすると Jigsaw が導入され、 Javaプラットフォームモジュールシステム(JPMS) が導入され、プロジェクトはJavaバージョン9以降はモジュール化されます。これには、[ moduleの宣言 であるmodule-info.classと呼ばれるプライマリコンパイルクラスが含まれます。

最初のドラフト 、そして最終的には モジュールシステムの状態 は、従い実践された概念よりも優れていることを説明しています。


Eclipse Oxygenの現在のバージョンとJava 9との互換性に関する追加のトリック

私の知る限り、 最新のOxygenビルド(この時点ではOxygen.2) はEclipseから追加のプラグインサポートなしでJava9と互換性があることを意図しています。


追加の有用なリソース:

2
Naman