虽然tools.jar不是JRE中的一个组件,但它附带了所有JDK的主要实现,比如Oracle和OpenJDK。
不是JRE的标准组件意味着,当我分发一个使用tools.jar的Java应用程序时,我必须将它与应用程序包一起分发,或者将它包含在类路径中。
我的问题是:
tools.jar,但是对于OpenJDK,我们可以从OpenJDK分发tools.jar以避免许可证问题吗?发布于 2014-03-18 11:14:30
简短回答: You 不能只从Oracle或OpenJDK重新分发tools.jar而不重新分发整个包。
详细答案如下:
在网上看了几篇文章之后,下面是我对你的问题的发现:
tools.jar是否包含与平台相关的组件,从而阻止其跨不同平台(Windows/Linux/OSX)进行分发?
没有为tools.jar定义标准依赖项。我编写了一个示例程序,它在Unix和Windows机器上运行得很好。我已将tools.jar从Windows机器复制到Unix计算机。一切都很好。
我们已经知道Oracle不允许发布tools.jar,但是对于OpenJDK,我们可以从OpenJDK分发tools.jar以避免许可证问题吗?
tools.jar,您必须使用“javac字节码编译器”(其中包括tools.jar)重新分发整个 Oracle JDK,或者整个JRE;允许将该重新分发与应用程序“捆绑”。来源: 我们能重新分发甲骨文tools.jar吗? Oracle JDK许可证: http://www.oracle.com/technetwork/java/javase/readme-142177.html#redistribution
如果tools.jar不能与应用程序一起分发,那么是否有一种独立于平台的方法来确定其位置,以便将其放入类路径?
OpenJDK携带(版本2 ),但Classpath除外。GPL v2许可软件的被许可方可以:
您可以在GNU通用公共许可证v2概述上获得GPL v2的更多详细信息。
更新:定位并将tools.jar添加到类路径中。
如果最终用户使用JDK运行应用程序,您将自动获得所需的tools.jar。如果不是,那么您需要建议用户安装JDK。
要通过程序检查这一点,您可以使用Eclipse。下面的代码显示了如何在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);您可以在这里检查是否存在tools.jar,然后显示消息,否则以编程方式将其添加到类路径。
希希尔
发布于 2014-03-10 16:29:15
仅仅要求安装JDK并设置$JAVA_HOME不是更容易吗?用你的应用程序打包tools.jar似乎相当危险。然后,用户将有责任在$JAVA_HOME上获得$PATH,但是他们选择这样做。
https://stackoverflow.com/questions/22305686
复制相似问题