【问题标题】:Compiling Java 11 code with maven-compiler-pugin 2.2 [duplicate]使用 maven-compiler-pugin 2.2 编译 Java 11 代码 [重复]
【发布时间】:2019-04-12 00:52:34
【问题描述】:

我正在尝试使用 maven-compiler-plugin 2.2 编译 Java 11 代码,它给出了以下错误:

[INFO] 2 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure
\projects\testoldmaven\src\main\java\Main.java:[10,14] error: cannot find symbol
\projects\testoldmaven\src\main\java\Main.java:[11,8] error: cannot find symbol

我想知道原因是我做错了什么还是问题很普遍,而 Maven 2 根本不支持 Java 11。或者是否有任何解决方法可以帮助我使用 Maven 2 编译 Java 11 代码? 我试图搜索任何可以直接声明 Maven 2 不支持 Java 的可靠文章,或者运行 Java 11 代码的任何最低 maven 版本要求,或者可以使用 maven-compler-plugin 2 执行的任何最高 Java 版本。 x,但找不到任何有用的东西。

代码本身只是对一些 Java 11 特定片段的简单测试:

public static void main(String[] args) {
    Optional<Integer> value = Optional.empty();
    final var id = 123;
    var text = "This is the test of var & repeat\r\n";
    System.out.println(text.repeat(2));
    System.out.println(id * text.lines().count());
}

我的 pom.xml 看起来像这样:

<groupId>1.0</groupId>
<artifactId>test-old-maven</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.2</version>
            <!--<version>3.6.1</version>-->
        </plugin>
    </plugins>
</build>
<properties>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.release>11</maven.compiler.release>
</properties>

如果有人能阐明我的问题,那就太好了。提前感谢您的帮助。

【问题讨论】:

标签: java compiler-errors maven-2 maven-compiler-plugin java-11


【解决方案1】:

通过设置&lt;maven.compiler.source&gt;1.8&lt;/maven.compiler.source&gt;,您实际上是将-source 1.8 传递给javac 编译器。

这告诉编译器您希望将输入源代码显式限制为 Java 1.8 语法和语言。当您使用 Java 8 中未定义的语言结构时(例如 var),它将会失败。

当您还指定 release 时,source 的值似乎优先。

【讨论】:

  • 感谢您的回答。我放置引用 Java 8 的行的原因是,没有它们我什至无法编译 Java 8 代码,并得到一个错误:[INFO] Compilation failure error: Source option 1.3 is no longer supported. Use 6 or later. error: Target option 1.1 is no longer supported. Use 1.6 or later.
  • 如果将源/目标更改为 11 会发生什么?你确定maven调用的javac版本来自JDK 11吗? (例如,$JAVA_HOME 是否指向 JDK 11,并且您没有在 maven 设置文件中显式覆盖它)
  • 再次感谢您的回答,代码正在使用一些修改过的 maven 属性进行编译:&lt;properties&gt; &lt;maven.compiler.target&gt;11&lt;/maven.compiler.target&gt;&lt;maven.compiler.source&gt;11&lt;/maven.compiler.source&gt;&lt;/properties&gt;。我会将您的回答标记为已接受,因为它有助于找到解决问题的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 2021-02-07
  • 2020-02-16
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多