Java 7zip命令行-创建可执行JAR

Java 7zip命令行-创建可执行JAR,java,windows,zip,cmd,7zip,Java,Windows,Zip,Cmd,7zip,我有一个可执行的.jar-文件,可以运行,但我想用另一个程序将一些文件添加到.jar文件中。我的想法是使用7zip命令行扩展名,但是当我尝试向.jar-文件添加内容时。我使用以下命令: 7za.exe a-t7z C:\myfiles\thejar.jar C:\filestoadd\*-r 每次我尝试这样做时,CMD都会抛出一个错误并说: 错误:C:\myfiles\thejar.jar不支持存档 嗯,好的。然后我的想法是解压缩文件thejar.jar,将文件添加到从thejar.jar中提取

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

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

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

错误:C:\myfiles\thejar.jar不支持存档


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

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

还可以使用
JarOutputStream
创建JAR文件:

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


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

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

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

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


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



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

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

谢谢,现在它可以工作了,但我无法执行
.jar
-File。。。它再次表示jarfile
无效或损坏……是的,我已经想到了,但这意味着我程序的用户需要安装JDK。我可以复制
jar.exe
,但我不知道这是否侵犯了Oracle的版权。哦,是的,好吧,jar.exe现在可以工作了,但是我可以为我的项目复制
jar.exe
jli.dll
?我不想侵犯任何版权,所以。。。(这个项目对我来说是非营利性的)你说从“一个可执行的jar文件”开始,这样我们就可以安全地假设你的用户有一个JRE,即使不是JDK。在这种情况下,另一种方法可能是编写一些使用Ant构建JAR的代码,或者自己使用ZipoutStream(这是
JAR
命令在内部使用的)来编写JAR。谢谢我会看看我能做什么。但首先,我还有一个问题。我可以复制
jar.exe
jli.dll
(需要
jar.exe
)并将其添加到我自己的项目中吗?我这样问是因为这是Oracle制作的,我不想侵犯他们的版权。这意味着我将重新发布它并重新发布(这对我来说是非盈利的)。可以帮助您在纯Java中完成所需的操作。