首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将tools.jar与Java应用程序包一起分发是否安全?

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

Stack Overflow用户
提问于 2014-03-10 16:23:56
回答 2查看 2.5K关注 0票数 7

虽然tools.jar不是JRE中的一个组件,但它附带了所有JDK的主要实现,比如Oracle和OpenJDK。

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

我的问题是:

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

回答 2

Stack Overflow用户

回答已采纳

发布于 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;允许将该重新分发与应用程序“捆绑”。
  • 重分发的JDK或JRE必须是“完整的和未修改的”(减去一些关于可以添加和/或减去的内容的部分)。
  • 你永远不能重新发行测试版。
  • 您遵守了许可证重新分配部分中涵盖的其他通用术语。

来源: 我们能重新分发甲骨文tools.jar吗? Oracle JDK许可证: http://www.oracle.com/technetwork/java/javase/readme-142177.html#redistribution

如果tools.jar不能与应用程序一起分发,那么是否有一种独立于平台的方法来确定其位置,以便将其放入类路径?

OpenJDK携带(版本2 ),但Classpath除外。GPL v2许可软件的被许可方可以:

  • 复制和分发程序的未经修改的源代码(第1节)
  • 修改程序的源代码并分发修改后的源代码(第2节)
  • 分发程序的编译版本,包括修改版本和未修改版本(第3节),条件是:
    • 所有已分发的副本(修改与否)均附有版权通知,并不包括保证(第1和2条)。
    • 所有修改后的副本都在GPL v2下分发(第2节)
    • 程序的所有编译版本都附有相关的源代码,或提供相关源代码的可行提议(第3节)。

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

更新:定位并将tools.jar添加到类路径中。

如果最终用户使用JDK运行应用程序,您将自动获得所需的tools.jar。如果不是,那么您需要建议用户安装JDK

要通过程序检查这一点,您可以使用Eclipse。下面的代码显示了如何在JVM中定位当前JDK/JRE的绝对路径,并将JAR添加到classpath中。

代码语言:javascript
复制
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,然后显示消息,否则以编程方式将其添加到类路径。

希希尔

票数 10
EN

Stack Overflow用户

发布于 2014-03-10 16:29:15

仅仅要求安装JDK并设置$JAVA_HOME不是更容易吗?用你的应用程序打包tools.jar似乎相当危险。然后,用户将有责任在$JAVA_HOME上获得$PATH,但是他们选择这样做。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22305686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档