web-dev-qa-db-fra.com

Échec de l'exécution du plugin maven-compiler: 3.6.1: testCompile lors de l'utilisation de Java 9

Je sais qu'il y a beaucoup de questions avec une erreur similaire. J'apprécierais avant tout que les doublons tiennent compte du fait que cela n'arrive qu'avec Java 9.

J'ai Java 9 installé

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

Pour simplifier l’exemplification, si je télécharge un exemple très simple https://examples.javacodegeeks.com/core-Java/java-9-httpclient-example/ et j’essaie /

package d'installation propre mvn -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>

Je suis un peu confus ce qui pourrait causer ce problème. De plus, je suis confronté à un autre défi qui complique un peu la tâche de quelqu'un qui utilise Java 9 pour la première fois: mon Eclipse n'accepte pas correctement Java 9. J'ai essayé d'installer le support Java 9 dans Eclipse Oxygen que je venais de télécharger. mais je reçois "Aucun référentiel trouvé sur http://download.Eclipse.org/Eclipse/updates/none ". Et je ne peux pas faire en sorte que ce plugin mvn mette à jour la version Java vers la version 9 (cela fonctionnait correctement pour 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>

C'est la raison pour laquelle j'essaye de compiler straich à partir de la ligne de commande.

J'ai lu que Java 9 est arrivé avec un nouveau concept de modularité qui nous aidera à mieux organiser les packages, mais je suis très content si cela peut me conduire à résoudre mon problème. Cela pourrait être une solution évidente quand quelqu'un voit "Impossible d'analyser module-info" mais je ne peux rien imaginer d'essayer.

Ma question directe est ce que je pourrais vérifier afin de compiler. Une astuce supplémentaire pour rendre Eclipse Oxygen version actuelle compatible avec Java 9 sera également utile.

  • Édité

 enter image description here

La version Eclipse téléchargée pour Windows il y a moins de 24 heures:

Eclipse Java EE IDE pour les développeurs Web.

Version: Version Oxygen.2 (4.7.2) Identifiant de la construction: 20171218-0600

  • Édité une deuxième fois

Après avoir changé de 1.9 à 9, l'icône d'erreur rouge a disparu et j'ai maintenant Java 9. Néanmoins, maintenant j'ai cette erreur:

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

Ce qui n'a pas de sens pour moi car:

 enter image description here

  • Édité troisième fois

 enter image description here

6
Jim C

En bref, ajoutez une classe manquante/égarée nommée module-info.Java pour inclure la déclaration de module de votre projet à la racine source de votre projet. (par exemple src/main/Java)

De plus, notez mise à niveau vers la version 3.7.0 du maven-compiler-plugin au cas où vous auriez un COMMENTAIRE INCLUS DANS VOTRE CLASSE module-info. [Les journaux semblent très pertinents à cela.]


Sinon, si vous souhaitez compiler votre projet avec une version antérieure de Java, utilisez l’indicateur release comme:

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

Concepts

Avec Java9 marquant l'achèvement du projet Jigsaw introduisant le JPMS , les projets basés sur la version 9 et au-delà de Java seraient modularisés. Cela inclurait une classe primaire compilée appelée module-info.class qui est cette déclaration du module

Le projet initial } et éventuellement l'état du système de modules décrit le mieux les concepts suivis et mis en pratique.


Une astuce supplémentaire concernant la version actuelle d’Eclipse Oxygen compatible avec Java 9

Autant que je sache, les les dernières versions d'Oxygen (Oxygen.2 à ce jour) } d'Eclipse sont censés être compatibles avec Java9 sans aucun support supplémentaire pour les plugins.


Ressources utiles supplémentaires:

1
nullpointer