java - Java 13 和 Java 8 中的交叉编译
问题描述
我想加载特定于 Java 版本的JavaCompiler
.
这就是我目前采用编译器实例的方式:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
我的目标是根据最初编写的 Java 版本(Java 8 或 Java 13)编译“用户 Java 代码”。
我正在用 Java 8 构建我的整个源代码。
因此compiler
,我得到的实例将是 Java 8 特定的,我无法编译 Java 13 代码(如果我错了,请纠正我)。
我安装了 Java 8 和 Java 13。
我从这篇文章中阅读了以下声明
ToolProvider 在这种情况下定位默认编译器。也可以通过使用服务提供者机制来定位替代编译器或工具。
有什么方法可以加载特定于 Java 版本的 Java 编译器?有解决方法吗?
或者,如果我使用 Java 13 构建项目,我可以使用Java 13 编译器的--target
or--source
或--release
参数来编译特定于版本的版本吗?
解决方案
我还没有尝试过,但是下面的代码片段可能会让你继续前进:
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 进行编译。
推荐阅读
- python - 如何求解均值的演化
- android - FFmpeg 为 ORIGINAL 和 CONVERTED 文件生成不同数量的帧,即使它们具有相同的持续时间和帧速率
- java - 如何检查两个本地时间是否在同一天?
- mongodb - MongoDb 游标已关闭。db 宕机后不恢复
- selenium-webdriver - 如何使用 selenium python 滚动到页面底部?(使用 find_element_by_xpath())
- git - 在 WSL 上使用 SSH 将代码推送到 Azure DevOps 失败
- docker - Docker:非root用户在使用卷时没有写权限
- python-3.x - Robotframework-selenium-Edgebrowser-“未创建会话-未找到匹配的功能
- c# - 创建内部 WebAPI 2.0 循环
- android - Flutter API 响应