使用 maven-compiler-pugin 2.2 编译 Java 11 代码
Compiling Java 11 code with maven-compiler-pugin 2.2
我正在尝试使用 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 版本要求或任何最大 Java 可以使用 maven-compler-plugin 2.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>
如果有人能阐明我的问题,那就太好了。提前感谢您的帮助。
通过设置 <maven.compiler.source>1.8</maven.compiler.source>
,您实际上是将 -source 1.8
传递给 javac
编译器。
这就是告诉编译器您要将输入源代码明确限制为 Java 1.8 语法和语言。由于您使用的是 Java 8 中未定义的语言结构(例如 var
),它将失败。
由于您还指定了 release
,因此 source
的值似乎优先。
我正在尝试使用 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 版本要求或任何最大 Java 可以使用 maven-compler-plugin 2.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>
如果有人能阐明我的问题,那就太好了。提前感谢您的帮助。
通过设置 <maven.compiler.source>1.8</maven.compiler.source>
,您实际上是将 -source 1.8
传递给 javac
编译器。
这就是告诉编译器您要将输入源代码明确限制为 Java 1.8 语法和语言。由于您使用的是 Java 8 中未定义的语言结构(例如 var
),它将失败。
由于您还指定了 release
,因此 source
的值似乎优先。