Java 更新jar中的文件会引发ZipException

Java 更新jar中的文件会引发ZipException,java,jar,Java,Jar,我正在尝试使用以下命令更新现有jar(在本例中为antlr)中的文件: jar -uf antlrworks-1.2.3.jar org/antlr/codegen/templates/Java/Java.stg 但我得到了以下信息 java.util.zip.ZipException:重复条目:antlr/antlerror.class 位于java.util.zip.ZipOutputStream.putnextry(ZipOutputStream.java:175) 位于java.ut

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

jar -uf antlrworks-1.2.3.jar org/antlr/codegen/templates/Java/Java.stg 
但我得到了以下信息

java.util.zip.ZipException:重复条目:antlr/antlerror.class 位于java.util.zip.ZipOutputStream.putnextry(ZipOutputStream.java:175) 位于java.util.jar.JarOutputStream.putnextry(JarOutputStream.java:92) 位于sun.tools.jar.Main.update(Main.java:508) 位于sun.tools.jar.Main.run(Main.java:185) 位于sun.tools.jar.Main.Main(Main.java:1044)


有什么想法吗?

您正在尝试做正确的事情,但是jar文件有问题-它有两个相同的条目:((这对于zip文件是合法的,但没有真正的帮助-正如您所看到的,它会让
jar
抱怨。)

如果你跑

jar tvf antlrworks-1.2.3.jar > contents
然后查看生成的
内容
文件,您将看到存在各种重复文件。您可能应该将此报告给antlr项目(在检查他们还不知道的情况后)


作为一种解决方法,您可以提取jar文件的内容,再将其放入jar中,然后您将拥有一个可以更新的“工作”jar文件。(如果您只需要执行一次,您可以将所需的文件解压缩,放入其中,然后将整个文件放入jar中,而不是随后对其进行更新。)

您可以对该文件执行相同的操作


如果您的文件位于列表顶部,jar任务必须选择tp build本身,您的新文件将被考虑。

如果您在OS X上,请尝试该应用程序。我使用它来修补wicket中的javascript错误。您可以打开一个jar文件,它列出了所有内容。导航到要保存的文件(在本例中为.js文件)和修改文件,然后保存内容,它负责为您修改.jar文件。不确定这是否适用于.java文件

<jar duplicate="preserve" jarfile="...">
   your files
</jar>
 aPath/aFile already added, skipping