java - 更新 jar 中的文件会抛出 ZipException

标签 java jar

我正在尝试使用以下命令更新现有 jar(在此示例中为 antlr)中的文件:

jar -uf antlrworks-1.2.3.jar org/antlr/codegen/templates/Java/Java.stg 

但我收到以下消息

java.util.zip.ZipException: duplicate entry: antlr/ANTLRError.class at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:175) at java.util.jar.JarOutputStream.putNextEntry(JarOutputStream.java:92) at sun.tools.jar.Main.update(Main.java:508) at sun.tools.jar.Main.run(Main.java:185) at sun.tools.jar.Main.main(Main.java:1044)

有什么想法吗?

最佳答案

您正在尝试做正确的事情,但是 jar 文件有问题 - 它有两次相同的条目:( jar 提示。)

如果你跑

jar tvf antlrworks-1.2.3.jar > contents

然后查看生成的contents 文件,您会看到有各种重复文件。您可能应该将此报告给 antlr 项目(在检查他们是否还不知道之后)。

作为解决方法,您可以提取 jar 文件的内容,再次将其打包,然后您将拥有一个可以更新的“工作”jar 文件。 (如果你只需要这样做一次,你可以只提取,把你想要的文件放在那里,然后把所有的东西都打包起来,而不是事后更新它。)

关于java - 更新 jar 中的文件会抛出 ZipException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/790430/

相关文章:

java - 使用 JavaFx 应用 MVC

java - Apache HTTP 客户端 400 错误

java - 如何将不同驱动器中的 jar 包含到 jar 文件中的 list 文件中

java - 如何为Testng创建一个可执行jar文件,runnnig点应该是Xml文件

java - 如何编译maven包上的classpath资源?

java - 如何将 Guava 添加到我的 Eclipse 项目中?

java - 在 LDAP 搜索过滤器中,是否可以请求多值字段的第一个、第二个、第 n 个或最后一个值?

java - Android AsyncTask 出现问题 - JavaMail

java - 相当于 Guava 的 Strings.isNullOrEmpty() 用于 Long、Integer 等

java - 创建 Rational Rhapsody 插件