webentwicklung-frage-antwort-db.com.de

Fehler beim Ausführen des Maven-Compiler-Plugins: 3.6.1: testCompile bei Verwendung von Java 9

Ich weiß, dass es viele Fragen mit ähnlichen Fehlern gibt. Ich würde es vorweg als Punkt merken, da dies nur bei Java 9 der Fall ist.

Ich habe Java 9 installiert

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

Um die Veranschaulichung zu vereinfachen, wenn ich ein sehr einfaches Beispiel herunterlade https://examples.javacodegeeks.com/core-Java/java-9-httpclient-example/ und ich versuche /

mvn clean install package -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>

Ich bin etwas verwirrt, was dieses Problem verursachen könnte. Darüber hinaus stehe ich vor einer weiteren Herausforderung, die es für jemanden, der zum ersten Mal mit Java 9 arbeitet, etwas schwieriger macht: Mein Eclipse akzeptiert Java 9 nicht richtig. Ich habe versucht, Java 9 Support in Eclipse Oxygen zu installieren, das ich gerade heruntergeladen habe Ich bekomme aber "Kein Repository gefunden unter http://download.Eclipse.org/Eclipse/updates/none ". Und ich kann dieses mvn-Plugin nicht dazu bringen, die Java-Version auf 9 zu aktualisieren (früher funktionierte es für 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>

Aus diesem Grund versuche ich, Straich von der Kommandozeile aus zu kompilieren.

Ich habe gelesen, dass Java 9 mit einem neuen Konzept der Modularität ausgestattet ist, das uns dabei helfen wird, die Pakete besser zu organisieren, aber ich bin sehr eingeschränkt, wenn dies mich dazu bringen könnte, mein Problem zu beheben. Es könnte eine offensichtliche Lösung sein, wenn jemand "Fehler beim Analysieren der Modul-Informationen" sieht, aber ich kann mir nichts Besseres vorstellen.

Meine direkte Frage ist, was ich überprüfen könnte, um es zu kompilieren. Ein weiterer Trick in Bezug auf die Eclipse Oxygen-Version, die mit Java 9 kompatibel ist, wird ebenfalls anerkannt.

  • Bearbeitet

enter image description here

Eclipse-Version, die vor weniger als 24 Stunden für Windows heruntergeladen wurde:

Eclipse Java EE IDE für Webentwickler.

Version: Oxygen.2 Release (4.7.2) Build-ID: 20171218-0600

  • Zum zweiten Mal bearbeitet

Nachdem ich von 1.9 auf 9 gewechselt habe, war das rote Fehlersymbol weg und ich habe jetzt Java 9. Trotzdem habe ich jetzt diese Fehlermeldung erhalten:

[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?

Was für mich keinen Sinn macht, weil:

enter image description here

  • Zum dritten Mal bearbeitet

enter image description here

6
Jim C

Kurz gesagt, fügen Sie eine fehlende/falsch platzierte Klasse mit dem Namen module-info.Java hinzu, um die Moduldeklaration Ihres Projekts in das Quellverzeichnis des Projekts aufzunehmen. (z. B. src/main/Java)

Beachten Sie außerdem das Upgrade auf die Version 3.7.0 des maven-compiler-plugin, falls Sie einen - Kommentar in Ihrer module-info-Klasse enthalten. [Die Protokolle scheinen ziemlich relevant zu sein.]


Oder, wenn Sie Ihr Projekt mit einer früheren Java-Version kompilieren möchten, verwenden Sie das Flag release als:

<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>

Konzepte

Mit Java9 markiert der Abschluss des Projekts Jigsaw darin die Einführung des Java Platform Module System (JPMS) , Projekte, die auf Java Version 9 oder höher basieren, würden modularisiert. Dies würde eine primäre kompilierte Klasse mit dem Namen module-info.class enthalten, die Deklaration von module ist. 

Der Anfangsentwurf und schließlich Der Zustand des Modulsystems beschreibt am besten die Konzepte, die befolgt und praktiziert werden.


Ein weiterer Trick in Bezug auf die aktuelle Version von Eclipse Oxygen kompatibel mit Java 9

AFAIK die neuesten Oxygen-Builds (Oxygen.2 zu diesem Zeitpunkt) von Eclipse sollen Java9-kompatibel sein, ohne zusätzliche Plugin-Unterstützung.


Zusätzliche nützliche Ressourcen:

1
nullpointer