2

我想加载特定于 Java 版本的JavaCompiler.

这就是我目前采用编译器实例的方式:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

我的目标是根据最初编写的 Java 版本(Java 8 或 Java 13)编译“用户 Java 代码”。

我正在用 Java 8 构建我的整个源代码。

因此compiler,我得到的实例将是 Java 8 特定的,我无法编译 Java 13 代码(如果我错了,请纠正我)。

我安装了 Java 8 和 Java 13。

我从这篇文章中阅读了以下声明

ToolProvider 在这种情况下定位默认编译器。也可以通过使用服务提供者机制来定位替代编译器或工具。

有什么方法可以加载特定于 Java 版本的 Java 编译器?有解决方法吗?

或者,如果我使用 Java 13 构建项目,我可以使用Java 13 编译器的--targetor--source--release参数来编译特定于版本的版本吗?

4

2 回答 2

1

我还没有尝试过,但是下面的代码片段可能会让你继续前进:

JavaCompiler eclipseCompiler = ServiceLoader.load(org.eclipse.jdt.internal.compiler.tool.EclipseCompiler.class).iterator().next();

要构建您的应用程序,您只需将以下内容添加到您的依赖项中(以 maven 坐标给出):

<groupId>org.eclipse.jdt</groupId>
<artifactId>ecj</artifactId>
<version>3.21.0</version>

这将在 Java 8 上运行,并允许您的应用程序为合规性 13 进行编译。

于 2020-04-04T10:06:40.847 回答
1

所以我使用的最后一种方法是:

步骤1:

安装Java 8Java 13。

第2步:

Java 13 设为默认

javac和_java

第 3 步:

在 Java 13 中构建项目

第4步:

使用 Java 13 编译器编译 Java 8 和 Java 13 程序。

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

它将为您提供 Java 13 编译器。

第 5 步:

编译时我使用了该--release选项。

您必须指定

--release 13对于 Java 13(或者你也没有,因为编译器只是 Java 13)

--release 8对于 Java 8。

第 6 步: 执行类文件:

用于 java 8 执行的 java 8 执行路径。

例如:

path_to_java_8/java Helloworld

对于 Java 13 执行,您可以直接使用java命令,因为 java 13 是默认的

java Helloworld
于 2020-06-05T06:53:11.300 回答