java - Java 13 和 Java 8 中的交叉编译

标签 java java-8 cross-compiling java-compiler-api java-13

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

这就是我当前获取编译器实例的方式:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

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

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

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

我安装了 Java 8 和 Java 13。

我从 this article 读到了以下声明

The ToolProvider locates the default compiler in this case. It is also possible to locate alternative compilers or tools by using service provider mechanism.

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

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

最佳答案

所以我最终使用的方法是:

第 1 步:

安装两者Java 8 和 Java 13。

第 2 步:

将 Java 13 设置为默认

两者javacjava

第 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执行路径。

例如:

path_to_java_8/java Helloworld

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

java Helloworld

关于java - Java 13 和 Java 8 中的交叉编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61011205/

相关文章:

javamail不发送邮件内容

java - 嵌套的 POJO 列表流到另一个 POJO 列表

java - 获取文件时分页

swift - 在 Mac 上编译 Swift 在 Windows 上运行

python - 如何使用gcc在windows for linux上进行跨平台编译?

java - java中的函数没有完成

java - 销毁 Fixture 时出现 LibGDX Java fatal error

java - Java 8 中涉及条件的嵌套循环

gcc - 可以在没有自由的情况下构建 binutils 吗?或者report_times可以禁用吗?

具有父类(super class)和子类签名的 Java 2 函数 - 尽 pipe 类的类型是子类,但仍选择父类(super class)