当前位置: 首页 > 面试题库 >

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

壤驷升
2023-03-14
问题内容

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

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

我的问题是:

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

问题答案:

简短的回答:不能 只是重新分配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,您必须仅使用“ javac字节码编译器”(包括;)重新分发 整个 Oracle JDK或整个JRE tools.jar。允许重新分发与您的应用程序捆绑在一起。
  • 重新分发的JDK或JRE必须“完整且未修改”(减去关于可添加和/或减去的内容的几节)。
  • 您永远都不能重新发布Beta版本。
  • 您遵守许可证的“重新分发”部分中涵盖的其他一般条款。

来源: 我们可以重新分发Oracletools.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节)

您可以在GNU通用公共许可证v2-概述中获得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,然后显示消息,否则以编程方式将其添加到类路径中。



 类似资料:
  • 我最近不得不考虑一个新的软件的部署方法,它是用以下代码编写的: 雀巢6/Express 该软件将部署在160多台服务器上,分布在整个欧洲,其中一些服务器的互联网连接非常糟糕。 我做了一些研究,很多人明确建议不要捆绑销售。主要的论点是本机扩展将失败与捆绑器,如或(剧透:这是真的,但有一个解决方案)。在我看来,这在很大程度上是由于人们不关心这个事实:的作者在这个用例中使用了几乎相同的词。所以通常,我被

  • 我有以下结构: 我不知道如何构建一切,以便: 在本地运行服务器,以便调试 制作生产tar(例如使用应用程序插件) 生产应如下所示: ktor作为主服务器 ktor应用程序有API 所有反应JS/超文本标记语言文件也由ktor提供 换句话说,我想从单个Web应用程序提供所有服务。 我知道我可以制作两个独立的服务——一个用于反应,一个用于应用编程接口。但是我想把它捆绑到一个应用程序中。 地方发展要快。

  • 我在NetBeans平台(RCP)上开发了一个JavaSwing应用程序。我想将Windows JRE与NetBeans生成的安装程序一起包含,以防PC没有安装JRE,但我不知道如何做到这一点。我尝试按照以下说明操作,但失败了(我发现这些说明假设您完全了解JDK和JRE上的所有内容,例如,我会得到消息“pack 200”不被识别为内部或外部命令......似乎有些路径是错误的或过时的): 如何在安

  • 检测到JavaFX Ant API版本1.3结果:1 init:deps clean:正在更新属性文件:D:\softphone\build\build clean。属性删除目录D:\softphone\build clean:deps jar: 创建dir: D:\softphone\build 正在更新属性文件:D:\softphone\build\build jar。性质 已创建目录:D:\

  • 问题内容: 我有一个Maven OSGi多模块项目。当OSGi从各个项目模块中选择模块jar时,该项目将运行良好。 (请参见下面的1.1.B) 。 但是,使用第二种方法,每当我尝试使用通过maven-assembly- plugin版本2.6 放置到中央文件夹 (D:/ parent / provider / target / modules)* 中的捆绑包时, (请参见下面的1.1.A)都 将返

  • null 支持与平台无关的应用程序图标 支持对JAR的自动更新 运行my.jar时对JRE参数的支持 Linux支持(.deb或.rpm)