英文:
Cross Compilation in Java 13 and Java 8
问题
我想要加载特定于Java版本的JavaCompiler
。
这是我目前获取编译器实例的方式:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
我的目标是根据“用户Java代码”所在的Java版本(Java 8或Java 13)来编译它。
我正在使用Java 8构建整个源代码。
因此,我获取的compiler
实例将是特定于Java 8的,我无法编译Java 13的代码(如果我说错了,请纠正我)。
我已经安装了Java 8和Java 13。
我从这篇文章中读到以下语句:
在这种情况下,ToolProvider会定位默认的编译器。还可以通过使用服务提供程序机制来定位替代编译器或工具。
有没有办法可以加载特定于Java版本的Java编译器?
有没有解决方法?
或者,如果我使用Java 13构建项目,然后是否可以使用Java 13编译器的--target
、--source
或--release
参数进行版本特定的编译?
英文:
I want to load a Java version specific JavaCompiler
.
This is how I take compiler instance currently:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
My aim is to compile a "user Java code" according to the Java version (Java 8 or Java 13) in which it is originally written.
I am building my whole source code in Java 8.
Hence compiler
instance that I am getting will be Java 8 specific and I can not compile Java 13 code (correct me if I am wrong).
I have both Java 8 and Java 13 installed.
I read below statement from 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.
Is there any way from which I can load Java version specific Java compiler?
Is there a workaround for it?
Or, if I build project using Java 13, can I then compile version-specific using --target
or --source
or --release
arguments of Java 13 compiler?
答案1
得分: 2
所以我使用的最终方法是:
步骤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,使用--release 8
。
步骤6: 对于执行类文件:
对于Java 8执行,使用Java 8执行路径。
例如:
path_to_java_8/java Helloworld
对于Java 13执行,您可以直接使用java
命令,因为Java 13是默认版本。
java Helloworld
英文:
So the final approach I used is:
Step 1:
Install both Java 8 and Java 13.
Step 2:
Make Java 13 default
both javac
and java
Step 3:
Build the project in Java 13
Step 4:
Use Java 13 compiler to compile both Java 8 and Java 13 programs.
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
It will give you Java 13 compiler.
Step 5:
While compilation I used the --release
option.
You have to specify
--release 13
for Java 13 (or u don't have too, as the compiler is Java 13 only)
and
--release 8
for Java 8.
Step 6: For executing the class files:
java 8 execution path for java 8 execution.
for ex:
path_to_java_8/java Helloworld
For Java 13 execution you can directly use java
command as java 13 is default
java Helloworld
答案2
得分: 1
我尚未尝试过这个,但以下代码片段可能会帮助您开始:
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版标准。
英文:
I haven't tried this, but the following snippet might get you going:
JavaCompiler eclipseCompiler = ServiceLoader.load(org.eclipse.jdt.internal.compiler.tool.EclipseCompiler.class).iterator().next();
To build your application you just need to add the following to your depedencies (given as maven coordinates):
<groupId>org.eclipse.jdt</groupId>
<artifactId>ecj</artifactId>
<version>3.21.0</version>
This will run on Java 8 and allows your application to compile for compliance 13.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论