与Java应用程序包一起分发tools.jar是否安全?



虽然tools.jar不是JRE中的组件,但它包含在所有主要的JDK实现中,如Oracle JDK和OpenJDK。

不是JRE的标准组件意味着当我发布使用tools.jar的Java应用程序时,我必须将其与应用程序包一起发布或将其包含在类路径中。

我的问题是:

  • tools.jar是否包含平台相关的组件,阻止它跨不同平台(Windows/Linux/OSX)分发?
  • 我们已经知道Oracle JDK不允许分发tools.jar,但是OpenJDK呢,我们可以从OpenJDK分发tools.jar以避免许可问题吗?
  • 如果tools.jar不能与Java应用程序一起分发,是否有一种与平台无关的方法来确定其位置,以便将其放入类路径中?

简短的回答:不能仅从Oracle JDK或OpenJDK重新分发tools.jar而不重新分发整个包

详细答案如下:

在网上阅读了几篇文章后,以下是我对你的问题的发现:

tools.jar是否包含阻止它的平台相关组件从分布在不同的平台(Windows/Linux/OSX)?

没有为tools.jar定义标准依赖项。我已经编写了一个在Unix和Windows机器上完美运行的示例程序。我已经将tools.jar从Windows机器复制到Unix机器。一切正常。

我们已经知道Oracle JDK不允许分发tools.jar,但是OpenJDK呢,我们可以从OpenJDK避免许可问题?

  • 为了分发tools.jar,你必须重新分发整个 Oracle JDK,或者整个JRE,只有"javac字节码编译器",其中包括tools.jar;允许再分发与你的应用"捆绑"。
  • 重新发布的JDK或JRE必须"完整且未经修改"(减去关于您可以添加和/或减去的内容的几个部分)。
  • 你永远不能重新发布测试版。
  • 您遵守许可证的再分发部分所涵盖的其他一般条款。

Source:我们可以重新发布Oracle tools.jar吗?Oracle JDK License: http://www.oracle.com/technetwork/java/javase/readme-142177.html#redistribution

如果tools.jar不能与Java应用程序一起分发,则是有一个独立于平台的方法来确定它的位置,以便它可以放到类路径中吗?

OpenJDK带有GNU通用公共许可证,版本2,带有Classpath例外。GPL v2许可软件的被许可人可以:

  • 复制并发布程序的未经修改的源代码(第1节)
  • 修改程序的源代码并发布修改后的源代码(第2节)
  • 分发程序的编译版本,包括修改的和未修改的(第3条),前提是:
    • 所有分发的副本(修改或未修改)都带有版权声明和排除保修(第1条和第2条)
    • 所有修改的副本都是根据GPL v2 (Section 2)分发的
    • 程序的所有编译版本都附有相关源代码,或提供可用的相关源代码(第3节)

您可以在The GNU通用公共许可证v2 -概述中获得更多GPL v2的详细信息


UPDATE: Locate &添加tools.jar到classpath.

如果最终用户使用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不存在,则显示消息,否则将其以编程方式添加到类路径。

Shishir

要求安装JDK并设置$JAVA_HOME不是更容易吗?将tools.jar打包到您的应用程序中似乎相当危险。然后,无论用户选择如何做,用户都有责任在$PATH上获得$JAVA_HOME。

相关内容

  • 没有找到相关文章

最新更新