如何在不使用JDK的情况下从tools.jar使用JavaCompiler

Rgoulazian:

我正在尝试创建一个可以.java在运行时编译提供的文件的应用程序我知道tools.jarJDK 中有一个可用的程序化编译器但是,我不能保证该应用程序的用户具有JDK。我尝试tools.jar将应用程序打包并引用为库。当我tools.jar添加到类路径的Bootstrap条目中时,这似乎在Eclipse IDE中起作用将应用程序导出到可运行的jar(及其tools.jar包装)时,ToolProvider.getSystemJavaCompiler();返回null我不确定是什么问题,但是我认为这可能与将应用程序导出到可运行jar时未正确保留类路径的Bootstrap条目有关。有任何想法吗?tools.jar我可以使用编译器的替代方法吗?多谢您的耐心配合,因为这是我在这里发布的第一个问题!

胡安:

您需要在“ tools.jar”中使用编译器

ToolProvider.getSystemJavaCompiler()

将从path变量中定义的jdk返回编译器,您可以执行以下操作:

File file = new File(pathToToolsJar);
URL[] urls = new URL[]{ file.toURI().toURL() };
ClassLoader loader = new URLClassLoader(urls);
Class compilerClass = loader.loadClass("com.sun.tools.javac.api.JavacTool");
JavaCompiler compiler = (JavaCompiler) compilerClass.getConstructor().newInstance();

或者,您可以在编译时将tools.jar添加为库

import com.sun.tools.javac.api.JavacTool;
...
JavaCompiler compiler = new JavacTool();

或者您可以更改系统属性,但这会导致意外行为

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不使用DefaultServeMux的情况下实现HandlerFunc

如何在不使用make的情况下使用cgo?

如何在不使用<br />的情况下从CSS换行?

如何在不使用SphereGeometry的情况下绘制Sphere?

如何在不使用$ scope的情况下使用$ emit / $ on?

如何在不使用Setter的情况下使用Getter

如何在不使用div的情况下使iframe响应?

如何在不使用Webpack的情况下使用Babel

如何在不使用gradle或Maven或Eclipse的情况下将jar文件添加到Java项目

如何在不使用履行的情况下获取Dialogflow以使用ANY输入触发意图

如何在不使用PPA的情况下使用Ansible安装Java 8

如何在不使用引号的情况下使用&&内部回声?

如何在不使用JPQL的情况下选择多行?

如何在不使用循环的情况下多次打印?

如何在不使用xpath的情况下检查元素

#homework如何在不使用add()的情况下入队,而在不使用remove()的情况下出队?

如何在不使用IB的情况下使用自定义UITabBar类创建UITabBarController?

如何在不使用sudo的情况下输入chroot?

如何在不使用@import的情况下减少@import?

如何在不使用Quartz的情况下安排任务

如何在不使用VPN的情况下使用美国帐户从欧洲观看Netflix

如何在不使用jQuery但使用纯Javascript的情况下使用AJAX提交此表单

如何在不使用xml的情况下使用ViewPager?

如何在不使用mysql的情况下使用表

如何在不使用代理的情况下更改IP?

如何在不使用Azure门户的情况下获取DocumentDB磁盘使用情况

如何在不使用IDE的情况下使用其他资源创建.jar文件

如何在不使用AND的情况下从多行获取ID

如何在不使用Java -jar的情况下运行Java可执行文件

TOP 榜单

热门标签

归档