尽管tools.jar
它不是JRE中的组件,但它包含JDK的所有主要实现,例如Oracle JDK和OpenJDK。
不是JRE的标准组件,这意味着当我分发使用的Java应用程序时tools.jar
,必须将其与应用程序捆绑包一起分发,或将其包含在类路径中。
我的问题是:
tools.jar
,但是关于OpenJDK,我们可以从OpenJDK分发tools.jar以避免许可问题吗?简短的回答: 你 不能 只是重新分配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
。允许重新分发与您的应用程序捆绑在一起。来源: 我们可以重新分发Oracletools.jar吗? Oracle JDK许可证: http
:
//www.oracle.com/technetwork/java/javase/readme-142177.html#redistribution
如果无法将tools.jar与Java应用程序一起分发,是否有一种独立于平台的方法来确定其位置,以便可以将其放入类路径中?
OpenJDK带有GNU通用公共许可证,版本2,带有类路径异常。GPL
v2许可软件的被许可人可以:
您可以在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)