首页 > 解决方案 > Java 13 和 Java 8 中的交叉编译

问题描述

我想加载特定于 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参数来编译特定于版本的版本吗?

标签: javajava-8cross-compilingjava-compiler-apijava-13

解决方案


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

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 进行编译。


推荐阅读