7

在我当前的项目中,我需要在运行时编译 java 代码(在后台处理来自用户的输入)。这适用于类路径中的 tools.jar。但是,并非我的程序的所有用户都在他们的系统上安装了 JDK。其中一些只有 JRE,在这种情况下,运行时没有可用的 java 编译器。我可以通过将 Sun 的 tools.jar 作为我的工具的一部分来解决这个问题。

但是 tools.jar 非常大(>12 MB)。问题是我必须包含大 jar 文件,尽管我只对这个 jar 提供的一小部分功能感兴趣。

  1. 是否可以分解 tools.jar 文件,以便我有一小部分仅用于编译 java 代码的类?

  2. 这是非法的吗?

非常感谢。

4

6 回答 6

3

Eclipse 编译器只有 1.6 MB,应该可以在没有 Eclipse 的情况下工作。你可以在这里下载。它看起来也实现了 JavaCompiler API。

它是在 Eclipse 公共许可证下获得许可的,因此将它包含在您自己的应用程序中应该没有问题。

于 2010-08-21T11:53:35.123 回答
1

我不认为分解tools.jar是可能的,而且包含tools.jar也不合法。

检查http://forums.sun.com/thread.jspa?threadID=5161541

您可以寻找一些第 3 方 Java 编译器并更改您的代码以使用相同的代码。

但我不知道使用这些进行编译的确切代码。

于 2010-08-21T11:48:43.943 回答
1

我不会在运行时编译代码,而是用脚本语言重写代码并使用脚本框架。那么就不需要jdk,也没有法律问题可以解决。然后,您还可以选择使用多种语言,例如BeanshellJavaScriptjython

于 2010-08-21T12:09:47.017 回答
1

可能更好的问题是为什么?

如果您需要进行动态数学计算,请考虑 JEval。如果您需要人们编写简单的插件,请考虑 @Jay 提到的一些动态语言,例如 Javascript 或 Python。

对于其他任何事情,您应该要求您的用户下载 JDK,因为这就是编写 Java 所需要的。很难找到为什么要将编译器嵌入程序的充分理由

于 2010-08-21T13:48:47.460 回答
0

你想要像BeanShell这样的java脚本吗?它有助于在不编译它们的情况下运行 java 代码。

于 2010-08-21T12:00:14.537 回答
0

您可能想查看 Javassist 库,其中包含一个片段编译器,适用于创建一个方法来进行计算,然后使用该方法。

哪一个最合适取决于您的实际需求——尤其是您需要执行此操作的频率。

于 2010-08-21T12:22:08.660 回答