【问题标题】:Fatal error compiling: Failed to run the ecj compiler: Unrecognized option : --module-version致命错误编译:无法运行 ecj 编译器:无法识别的选项:--module-version
【发布时间】:2019-06-10 22:47: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]

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

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

另外,看了下源码http://central.maven.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/3.8.1/

特别是 CompilerMojo.java 的源代码:

module-version 总是被添加,所以似乎没有办法抑制它:

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

查看ecj的文档,没有“module-version”参数

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>

【问题讨论】:

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


    【解决方案1】:

    到目前为止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 之后。

    【讨论】:

    • 我也是这么想的——maven + ecj + java 模块的组合可能不是很常见,如果它不起作用,少数尝试过的人也不会太在意。我将按照建议的交叉引用帖子打开功能请求
    • maven + ecj + JPMS 的组合并不少见,但在组合中添加--module-version 似乎并不常见。
    • 嗯,这就是 maven-compiler-plugin(至少在最新版本中)默认情况下所做的,所以 maven/ecj/jpms 在我看来根本不起作用
    • 您是否有参考 maven-compiler-plugin 团队宣布/记录了他们通过了哪些与模块相关的选项?似乎连 m2e 团队都没有收到任何通知。
    • 这是 2018 年 8 月的提交:github.com/apache/maven-compiler-plugin/commit/…
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-06-28
      • 2017-04-09
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多