跨编译在Java 13和Java 8中

huangapple go评论86阅读模式
英文:

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成为默认版本,包括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,使用--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):

&lt;groupId&gt;org.eclipse.jdt&lt;/groupId&gt;
&lt;artifactId&gt;ecj&lt;/artifactId&gt;
&lt;version&gt;3.21.0&lt;/version&gt;

This will run on Java 8 and allows your application to compile for compliance 13.

huangapple
  • 本文由 发表于 2020年4月3日 19:47:57
  • 转载请务必保留本文链接:https://go.coder-hub.com/61011205.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定