Java13和Java8中的交叉编译
我想加载一个特定于Java版本的Java13和Java8中的交叉编译,java,java-8,cross-compiling,java-compiler-api,java-13,Java,Java 8,Cross Compiling,Java Compiler Api,Java 13,我想加载一个特定于Java版本的JavaCompiler 以下是我当前获取编译器实例的方式: JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 我的目标是根据最初编写的Java版本(Java8或Java13)编译“用户Java代码” 我正在用Java8构建我的全部源代码 因此,我得到的编译器实例将是特定于Java 8的,我无法编译Java 13代码(如果我错了,请纠正我) 我已经安装了Java8和Java13 我读了下面
JavaCompiler
以下是我当前获取编译器实例的方式:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
我的目标是根据最初编写的Java版本(Java8或Java13)编译“用户Java代码”
我正在用Java8构建我的全部源代码
因此,我得到的编译器
实例将是特定于Java 8的,我无法编译Java 13代码(如果我错了,请纠正我)
我已经安装了Java8和Java13
我读了下面的声明
在这种情况下,ToolProvider将定位默认编译器。也是
可以使用服务查找替代编译器或工具
提供者机制
是否有任何方法可以加载特定于Java版本的Java编译器?
有解决办法吗
或者,如果我使用Java 13构建项目,那么我可以使用Java 13编译器的
--target
或--source
或--release
参数编译特定版本吗 我还没有尝试过这一点,但下面的代码片段可能会让您有所收获:
JavaCompiler eclipseCompiler = ServiceLoader.load(org.eclipse.jdt.internal.compiler.tool.EclipseCompiler.class).iterator().next();
要构建应用程序,只需将以下内容添加到依赖项中(以maven坐标表示):
org.eclipse.jdt
欧洲法院
3.21.0
这将在Java 8上运行,并允许您的应用程序针对法规遵从性13进行编译。因此,我使用的最后一种方法是: 第1步: 同时安装Java 8和Java 13 第二步: 将Java 13设为默认值
javac
和java
第三步:
用Java 13构建项目
第4步:
使用Java13编译器编译Java8和Java13程序
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
它将为您提供Java13编译器
第五步:
编译时,我使用了--release
选项
您必须指定
——针对Java13的13版
(或者您没有太多,因为编译器仅限于Java13)
及
——针对Java 8的第8版
步骤6:用于执行类文件:
java 8执行的java 8执行路径
例如:
path_to_java_8/java Helloworld
对于Java 13执行,您可以直接使用Java
命令,因为Java 13是默认的
java Helloworld
您是否尝试过从Java13查看
JavaCompiler
支持哪些版本?我不知道,但是如果你只是用13来构建你的项目,那么所有以前的版本都会得到支持,就像编译器通常的情况一样(据我所知)。事实上,我有一个用java 8构建的项目,所以我只得到java 8版本,而getSourcecVersions则更少。是的,也许我可以用Java13构建。但我的目标是从一个用Java8构建的项目中获得Java13的编译器。我将尝试使用java 13构建。您不需要使用java 13构建项目,相关的问题是在哪个版本上运行使用JavaCompiler
的代码。然后,您需要一个支持编译java 13代码的兼容java 8的编译器实现。JDK 8附带的实现没有。Eclipse编译器ecj
仍然在Java 8上运行,最新版本支持编译Java 1.3版。。。14
java Helloworld