简短回答:您不能只tools.jar
从 Oracle JDK 或从 OpenJDK 重新分发而不重新分发整个捆绑包。
详细解答如下:
在网上阅读了几篇文章后,以下是我对您的问题的发现:
tools.jar 是否包含与平台相关的组件,这些组件会阻止它分布在不同的平台(Windows/Linux/OSX)上?
没有为tools.jar
. 我编写了一个在 Unix 和 Windows 机器上完美运行的示例程序。我已经tools.jar
从 Windows 机器复制到 Unix 机器。一切正常。
我们已经知道 Oracle JDK 不允许分发 tools.jar,但是 OpenJDK 呢,我们可以从 OpenJDK 分发 tools.jar 以避免许可问题吗?
- 为了分发
tools.jar
,您必须重新分发整个Oracle JDK,或者仅使用“Javac 字节码编译器”来重新分发整个 JRE,其中包括tools.jar
:允许重新分发与您的应用程序“捆绑”。
- 重新分发的 JDK 或 JRE 必须是“完整且未经修改的”(减去一些关于您可以添加和/或减去的内容的部分)。
- 您永远不能重新分发测试版。
- 您遵守许可证重新分发部分中涵盖的其他一般条款。
资料来源: 我们可以重新分发 Oracle tools.jar 吗?
Oracle JDK 许可证: http ://www.oracle.com/technetwork/java/javase/readme-142177.html#redistribution
如果 tools.jar 不能与 Java 应用程序一起分发,是否有一种独立于平台的方法来确定其位置,以便可以将其放入类路径中?
OpenJDK带有 GNU 通用公共许可证,第 2 版,带有类路径例外。GPL v2 许可软件的被许可人可以:
- 复制和分发程序未经修改的源代码(第 1 节)
- 修改程序的源代码并分发修改后的源代码(第 2 节)
- 分发程序的编译版本,包括修改后的和未修改的(第 3 节),前提是:
- 所有分发的副本(无论是否修改)都带有版权声明和免责声明(第 1 节和第 2 节)
- 所有修改后的副本均根据 GPL v2(第 2 节)分发
- 该程序的所有编译版本都附有相关源代码,或提供相关源代码的可行报价(第 3 节)
您可以在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);
资料来源:以编程方式启动 Java 应用程序
您可以在此处检查是否 tools.jar 不存在然后显示消息,否则以编程方式将其添加到类路径中。
施希尔