【问题标题】:7zip command line - Create executable jars7zip 命令行 - 创建可执行的 jars
【发布时间】:2012-10-14 12:10:20
【问题描述】:

我有一个可以运行的可执行文件.jar-File,但我想用另一个程序将一些文件添加到 .jar-File 中。我的想法是使用 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文件的目录中,并创建一个扩展名为.jar.zip。当我这样做时,文件thejar.jar 比之前 小了大约1MB。我尝试了不同的压缩方法,但它总是更小。当我尝试执行.jar 时,弹出一条错误消息并说Invalid or corrupt jarfile。我已经用谷歌搜索了我的问题,但我现在还没有答案……你能帮帮我吗?

【问题讨论】:

标签: java windows zip cmd 7zip


【解决方案1】:

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

也可以使用JarOutputStream创建一个JAR文件:

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


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

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

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

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


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


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

【讨论】:

  • 是的,我已经想到了,但这意味着我的程序的用户需要安装 JDK。我可以复制jar.exe,但不知道这是否侵犯了Oracle的版权。
  • 哦,是的,jar.exe 现在可以工作了,但是我可以为我的项目复制jar.exejli.dll 吗?我不想侵犯任何版权,所以......(这个项目对我来说是非盈利的)
  • 您谈到从“可执行 jar 文件”开始,因此我们可以安全地假设您的用户拥有 JRE,即使不是 JDK。在这种情况下,另一种方法可能是编写一些使用 Ant 构建 JAR 的代码,或者使用 ZipOutputStream 自己编写代码(这是 jar 命令在内部使用的)。
  • 太棒了。谢谢。我会看看我能做什么。但首先,我还有一个问题。我可以复制jar.exejli.dlljar.exe 需要)并将其添加到我自己的项目中吗?我问这个是因为这是由 Oracle 制作的,我不想侵犯他们的版权。这意味着我会重新上传并重新发布(这对我来说是非营利性的)。
【解决方案2】:

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

【讨论】:

  • 谢谢,现在它可以工作了,但是我不能执行那个.jar-File...它又是Invalid or corrupt jarfile...
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多