无法执行maven-compiler-plugin:3.6.1:使用java 9时的testCompile

时间:2018-01-01 22:51:44

标签: java eclipse maven java-9 module-info

我知道有很多类似错误的问题。我希望在重点之前考虑到它只发生在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 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>

我有点困惑可能导致这个问题。最重要的是,我面临的另一个挑战是让第一次尝试使用Java 9的人有点困难:我的Eclipse并没有正确地接受Java 9.我尝试在Eclipse Oxygen中安装Java 9支持刚刚下载了但是我得到了#34;在http://download.eclipse.org/eclipse/updates/none&#34;没有找到存储库。而且我无法使这个mvn插件将Java版本更新为9(它曾经适用于Java&lt; 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带来了新的模块化概念,这将有助于我们更好地组织软件包,但如果这可以促使我解决我的问题,我非常感兴趣。有人看到&#34;无法解析模块信息&#34;这可能是一个明显的解决方案。但我无法想象任何有用的东西。

我的直接问题是我可以检查以便编译。关于使Eclipse Oxygen当前版本与Java 9兼容的另一个技巧也将是值得赞赏的。

  • 被修改

enter image description here

不到24小时前为Windows下载的Eclipse版本:

面向Web开发人员的Eclipse Java EE IDE。

版本:Oxygen.2发布(4.7.2) 建造ID: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?

对我来说没有意义,因为:

enter image description here

  • 第三次编辑

enter image description here

2 个答案:

答案 0 :(得分:1)

简而言之,添加一个名为module-info.java的缺失/错位的类,以在项目的源根中包含项目的模块声明。 (例如src/main/java

此外,如果您有 upgrade to the version 3.7.0 ,请注意maven-compiler-plugin的{​​{3}}。 [日志似乎与此非常相关。]

或者另一方面,如果您希望使用以前版本的Java编译项目,请使用comment included in your module-info class标志:

<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标记项目release的完成,其中介绍了Jigsaw,基于Java版本9及以上构建的项目将模块化。这将包括一个名为module-info.class的主要编译类,即Java Platform Module System (JPMS)

module's declaration,最终initial draft描述了所遵循和实践的概念。

  

关于制作Eclipse Oxygen当前版本的另一个技巧   与Java 9兼容

来自Eclipse的The State of the Module System AFAIK意味着Java9兼容,不再需要任何额外的插件支持。

其他有用资源:

答案 1 :(得分:-1)

在第二个编辑中,您必须将jdk添加到构建路径。转到Windows->首选项-> Java->已安装的jre,并添加jdk,然后进行检查。