我有一个可以运行的可执行文件 .jar
-File,但我想用另一个程序将一些文件添加到 .jar-File。我的想法是使用 7zip 命令行扩展,但是当我尝试向 .jar
-File 添加内容时。我使用这个命令:
7za.exe a -t7z C:\myfiles\thejar.jar C:\filestoadd\* -r
每次我尝试这样做时,CMD 都会向我抛出一个错误并说:
错误:C:\myfiles\thejar.jar 不支持存档
嗯,好的。然后我的想法是解压缩文件 thejar.jar
,将文件添加到从 thejar.jar
中提取文件的目录并创建一个 .zip
扩展名为 .jar
。当我执行此操作时,thejar.jar
文件比以前 添加文件时小了大约 1MB。我尝试了不同的压缩方法,但它总是更小。当我尝试执行 .jar
时,弹出一条错误消息,提示 Invalid or corrupt jarfile
。我已经用谷歌搜索了我的问题,但我现在还没有得到答案...你能帮我吗?
最佳答案
简单/推荐的解决方案是使用每个 Java JDK 中包含的 jar
命令将额外文件添加到 JAR。
也可以使用 JarOutputStream
创建 JAR 文件:
使用 7zip 或任何其他“标准”zip 实用程序的问题在于,您可能会不小心使用一些 Java 实用程序无法理解的现代 zipfile 功能。
您还询问(在评论中)是否允许您将 Oracle JDK/JRE 中的 jar.exe
和 jli.dll
复制到您自己的项目中。
阅读许可证!我们不是这里的律师,我们无法为您提供适当的法律建议。
我的理解是,这将违反 Oracle 许可和版权。允许嵌入完整的 JRE,但不允许随意挑选。
考虑改用 OpenJDK。 OpenJDK 的许可是基于 GPL 的,并且对重新分发 vanilla 发行版没有基于版权的限制。甚至不需要修改和重新分发它……只要您提供源代码并针对您对其所做的任何更改构建说明1。
最后,请注意,这在 Java 11 及更高版本中没有实际意义。 Oracle 现在只分发完整的 JDK。因此,这意味着如果您的客户从 Oracle 安装“Java”,则将包含 jar
命令。
1 - 您只需担心商标问题。基本上,商标许可规定,如果产品以不允许的方式偏离“标准”,则不允许将其称为“Java”等。自己查找详细信息。
关于java - 7zip 命令行 - 创建可执行 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12882059/