虽然tools.jar
不是JRE中的组件,但它带有JDK的所有主要实现,例如Oracle JDK和OpenJDK。
不是JRE的标准组件意味着当我分发使用tools.jar
的Java应用程序时,我必须将其与应用程序包一起分发或将其包含在类路径中。
我的问题是:
tools.jar
,但是对于OpenJDK,我们可以从OpenJDK分发tools.jar以避免许可问题吗?答案 0 :(得分:4)
简答:您无法从Oracle JDK或OpenJDK重新分发tools.jar
而不重新分发整个捆绑包。
以下详细答案:
在阅读了几篇关于互联网的文章后,下面是我对你的问题的调查结果:
tools.jar是否包含阻止它的平台相关组件 从不同平台(Windows / Linux / OSX)分发?
没有为tools.jar
定义标准依赖项。我编写了一个在Unix和Windows机器上运行完美的示例程序。我已将tools.jar
从Windows机器复制到Unix机器。一切正常。
我们已经知道Oracle JDK不允许分发 tools.jar,但是OpenJDK呢,我们可以分发tools.jar吗? OpenJDK避免许可问题?
tools.jar
,您必须使用包含tools.jar
的“javac字节码编译器”重新分发整个 Oracle JDK或整个JRE;允许再分发与您的应用“捆绑”。来源: Can we redistribute Oracle tools.jar? Oracle JDK许可证: http://www.oracle.com/technetwork/java/javase/readme-142177.html#redistribution
如果tools.jar不能与Java应用程序一起分发,那么 有一种独立于平台的方式来确定它的位置,以便它 可以放入classpath吗?
OpenJDK带有GNU通用公共许可证,版本2,带有Classpath Exception。 GPL v2许可软件的被许可人可以:
您可以在The GNU General Public License v2 - An Overview
获取有关GPL v2的更多详情 更新:定位&将tools.jar
添加到类路径中。
如果最终用户使用JDK运行应用程序,您将自动获得所需的tools.jar
。如果没有,那么您需要建议用户安装JDK
。
要通过该程序进行检查,您可以使用Eclipse JDT JAR。下面的代码显示了如何在JVM中找到当前JDK / JRE的绝对路径,以及如何将JAR添加到classpath
。
IVMInstall jre = JavaRuntime.getDefaultVMInstall();
File jdkHome = jre.getInstallLocation();
IPath toolsPath = new Path(jdkHome.getAbsolutePath())
.append("lib")
.append("tools.jar");
IRuntimeClasspathEntry toolsEntry =
JavaRuntime.newArchiveRuntimeClasspathEntry(toolsPath);
toolsEntry.setClasspathProperty(IRuntimeClasspathEntry.USER_CLASSES);
来源:Launching Java Applications Programmatically
你可以检查一下,如果tools.jar不存在则显示消息,否则以编程方式将其添加到类路径中。
Shishir
答案 1 :(得分:3)
要求安装JDK并设置$ JAVA_HOME会不会更容易?将tools.jar打包到您的应用程序似乎相当危险。然后,用户有责任在$ PATH上获取$ JAVA_HOME,但是他们选择这样做。