Java 13和Java 8中的交叉编译



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

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

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

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

我正在用Java8构建我的全部源代码。

因此,我得到的compiler实例将是特定于Java 8的,并且我不能编译Java 13代码(如果我错了,请纠正我(。

我安装了Java 8和Java 13。

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

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

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

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

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

步骤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选项。

您必须指定

Java 13的--release 13(或者你没有,因为编译器只是Java 13(

用于Java 8的CCD_ 10。

步骤6:用于执行类文件:

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

例如:

path_to_java_8/java Helloworld

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

java Helloworld

我还没有尝试过,但下面的片段可能会让你开始:

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

要构建您的应用程序,您只需要将以下内容添加到您的depedency中(以maven坐标表示(:

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

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

相关内容

  • 没有找到相关文章

最新更新