Не удалось выполнить плагин maven-compiler-plugin:3.6.1:testCompile при использовании java 9

Я знаю, что есть много вопросов с подобной ошибкой. Я был бы признателен, прежде чем в качестве дубликата принять во внимание, что это происходит только с 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 появилась новая концепция модульности, которая поможет нам лучше организовать пакеты, но я очень уверен, что это может побудить меня решить мою проблему. Это может быть какое-то очевидное решение, когда кто-то видит "Не удалось разобрать module-info", но я не могу себе представить ничего полезного, чтобы попробовать.

Мой прямой вопрос: что я могу проверить, чтобы скомпилировать? Также будет полезен дополнительный урок о совместимости текущей версии Eclipse Oxygen с Java 9.

  • отредактированный

Версия Eclipse, загруженная для Windows менее 24 часов назад:

Eclipse Java EE IDE для веб-разработчиков.

Версия: Oxygen.2 Release (4.7.2) Идентификатор сборки: 20171218-0600

  • Отредактировано второй раз

После того, как я изменил с 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?

Что не имеет смысла для меня, потому что:

  • Отредактировано в третий раз

1 ответ

Решение

Короче говоря, добавьте отсутствующий / неуместный класс с именем module-info.java включить объявление модуля вашего проекта в корневой каталог вашего проекта. (например src/main/java)

Кроме того, обратите внимание, чтобы обновить до версии 3.7.0 maven-compiler-plugin если у вас есть комментарий, включенный в ваш module-info класс [Журналы, кажется, имеют к этому отношение.]


Или же, если вы хотите скомпилировать ваш проект с предыдущей версией 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 Platform Module System (JPMS), проекты, основанные на Java версии 9 и выше , будут модульными. Это будет включать в себя основной скомпилированный класс под названием module-info.class которая является объявлением этого модуля.

Первоначальный проект и, в конечном итоге, "Состояние модульной системы" лучше всего описывают концепции, которые используются и применяются на практике


Дополнительная хитрость в том, чтобы сделать текущую версию Eclipse Oxygen совместимой с Java 9

AFAIK последние сборки Oxygen (Oxygen.2 на данный момент) от Eclipse предназначены для совместимости с Java9 без дополнительной поддержки плагинов.


Дополнительные полезные ресурсы:

Во втором редактировании вы должны добавить jdk к вашему пути сборки. Перейдите в windows-> Настройки->Java-> Установленные jre и добавьте jdk, и проверьте его.

Другие вопросы по тегам