【发布时间】:2020-04-03 11:47:57
【问题描述】:
我想加载特定于 Java 版本的 JavaCompiler。
这是我目前获取编译器实例的方式:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
我的目标是根据最初编写它的 Java 版本(Java 8 或 Java 13)编译“用户 Java 代码”。
我正在使用 Java 8 构建我的整个源代码。
因此,我得到的 compiler 实例将是 Java 8 特定的,我无法编译 Java 13 代码(如果我错了,请纠正我)。
我同时安装了 Java 8 和 Java 13。
我从this article阅读了以下声明
ToolProvider 在这种情况下定位默认编译器。也是 可以通过使用服务找到替代编译器或工具 提供者机制。
有什么方法可以加载特定于 Java 版本的 Java 编译器? 有解决办法吗?
或者,如果我使用 Java 13 构建项目,我是否可以使用 Java 13 编译器的 --target 或 --source 或 --release 参数编译特定版本?
【问题讨论】:
-
您是否尝试过 Java 13 中的 getSourceVersions 以查看
JavaCompiler支持哪些版本?我不知道,但也许如果你只是使用 13 构建你的项目,那么所有以前的版本都将得到支持,就像编译器通常的情况一样(据我所知)。 -
实际上,我有一个用 java 8 构建的项目,所以我只获得了 java 8 版本,而 getSourcecVersions 则更少。是的,也许我可以使用 java 13 build。 但是我的目标是从使用 java 8 构建的项目中获取 java 13 的编译器。我将尝试构建 java 13。
-
您不需要使用 Java 13 构建您的项目,相关的一点是您运行使用
JavaCompiler的代码的哪个版本。 -
那么,你需要一个兼容 Java 8 的编译器实现,它支持编译 Java 13 代码。 JDK 8 附带的实现没有。
-
Eclipse 编译器
ecj仍然在 Java 8 上运行,并且最新版本支持编译 Java 版本 1.3 ... 14。
标签: java java-8 cross-compiling java-compiler-api java-13