gpt4 book ai didi

java - 如何在没有 JDK 的情况下从 tools.jar 使用 JavaCompiler

转载 作者:行者123 更新时间:2023-11-30 05:55:20 25 4
gpt4 key购买 nike

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

最佳答案

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

ToolProvider.getSystemJavaCompiler()

将从路径变量中定义的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();

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

关于java - 如何在没有 JDK 的情况下从 tools.jar 使用 JavaCompiler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53292291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com