我想加载特定于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默认
javac
和java
步骤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。