3

我有一个.jar可以运行的可执行文件,但我想用另一个程序将一些文件添加到 .jar 文件中。我的想法是使用 7zip 命令行扩展名,但是当我尝试向.jar-File 中添加一些内容时。我使用这个命令:

7za.exe a -t7z C:\myfiles\thejar.jar C:\filestoadd\* -r

每次我尝试这样做时,CMD 都会向我抛出一个错误并说:

Error: C:\myfiles\thejar.jar is not supported archive

好吧,好吧。然后我的想法是解压缩文件thejar.jar,将文件添加到从中thejar.jar提取文件的目录并创建一个.zip扩展名为.jar. 当我这样做时,文件thejar.jar比以前小了大约 1MB ,向其中添加了文件。我尝试了不同的压缩方法,但它总是更小。当我尝试执行时.jar,弹出一条错误消息并说Invalid or corrupt jarfile。我已经用谷歌搜索了我的问题,但我现在还没有答案……你能帮帮我吗?

4

3 回答 3

5

简单/推荐的解决方案是使用jar每个 Java JDK 中包含的命令将额外文件添加到 JAR。

也可以使用以下方法创建 JAR 文件JarOutputStream

使用 7zip 或任何其他“标准”zip 实用程序的问题在于,您可能会意外使用 Java 实用程序不理解的一些现代 zipfile 功能。


您还询问(在评论中)是否允许将jar.exeandjli.dll从 Oracle JDK / JRE 复制到您自己的项目中。

  • 阅读许可证! 我们不是这里的律师,我们无法为您提供适当的法律建议。

  • 我的理解是,这将违反 Oracle 许可和版权。允许嵌入完整的 JRE,但不允许挑选樱桃。

  • 考虑改用 OpenJDK。OpenJDK 的许可是基于 GPL 的,并且对重新分发 vanilla 发行版没有基于版权的限制。甚至不修改和重新分发它...只要您提供可用的源代码并为您对它所做的任何更改构建说明1


最后,请注意,这在 Java 11 及以后的版本中没有实际意义。Oracle 现在只分发完整的 JDK。这意味着如果您的客户从 Oracle 安装“Java”,该jar命令将被包含在内。


1 - 您只需要担心商标。基本上,商标许可表明,如果产品以未经许可的方式偏离“标准”,则不得将其称为“Java”等。自己查找详细信息。

于 2012-10-14T12:25:57.727 回答
2

-t7z将创建一个 7z 存档,而不是 zip。你需要-tzip

于 2012-10-14T12:30:03.647 回答
0

我知道这是一篇旧帖子,但如果有人正在搜索以下信息,那么以下内容效果很好并且制作了一个可以正确执行的 jar,我自己跑过这篇帖子寻找信息,最后想出了以下内容。

对我来说,这种方法是做我需要的最简单的方法,而且比使用 jar 更容易、更快,而且作为批处理文件效果很好

C:\Progra~1\7-Zip\7z.exe a -tzip -mx9 -spf -r Filename.jar *

于 2021-10-08T15:13:54.457 回答