致命错误编译:无法运行ecj编译器:无法识别的选项:--module-version

时间:2019-06-10 22:47:11

标签: java maven java-module ecj openjdk-11

尝试运行以下组合:

  • Maven(3.6.1)
  • OpenJDK 11
  • 使用module-info.java
Fails with the following error message:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project tourconex: Fatal error compiling: Fa
iled to run the ecj compiler: Unrecognized option : --module-version -> [Help 1]

尝试添加空白的compileArgs节点,但无济于事。

删除module-info.java可以解决此问题,但这不是我想要的。

还查看了来源http://central.maven.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.8.1/

特别是在CompilerMojo.java的源代码中:

总是添加模块版本,所以似乎没有办法抑制它:

compilerArgs.add( "--module-version" );
compilerArgs.add( getProject().getVersion() );

查看ecj的文档,没有“模块版本”参数

https://help.eclipse.org/oxygen/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftask-using_batch_compiler.htm

因此,目前看来它不起作用!?

Maven插件部分:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <compilerId>eclipse</compilerId>
        <source>11</source>
        <target>11</target>
        <release>11</release>
        <showWarnings>true</showWarnings>
        <showDeprecation>true</showDeprecation>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-compiler-eclipse</artifactId>
            <version>2.8.5</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jdt</groupId>
            <artifactId>ecj</artifactId>
            <version>3.17.0</version>
        </dependency>
    </dependencies>
</plugin>

2 个答案:

答案 0 :(得分:0)

直到现在ecj不支持选项--module-version

它可能由于以下几种原因而掉入裂缝:

  • 没人关心,因为该模块版本未由JVM或其他工具评估
  • 也许在Java 9 GA之前没有将其指定为新的编译器选项(http://openjdk.java.net/jeps/261没有版本历史记录,但我知道文本在发布之日就发生了重大变化)。

请通过https://bugs.eclipse.org/bugs/enter_bug.cgi?product=JDT

提交功能请求

编辑:您的功能请求已实现。虽然我们错过了今天发布的Eclipse 2019-06,但是您可以从https://download.eclipse.org/eclipse/downloads/index.html下面的下一个集成版本中获取ecj.jar-下一个完整版本计划于9月发布。

Edit2 :经过更多研究,最简单的解决方法可能是返回maven-compiler-plugin的3.8.0版本,该版本不尝试将--module-version传递给编译器。仅在今年5月发布3.8.1之后才发生这种情况。

答案 1 :(得分:0)

eclipse.org上已打开的问题/功能请求:https://bugs.eclipse.org/bugs/show_bug.cgi?id=548195