2009-04-26 11 views
6

Sto cercando di aggiornare un file in un vaso esistente (in questo esempio ANTLR) usando il comando:file di aggiornamento in un barattolo getta ZipException

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

ma ottengo il seguente messaggio

java.util.zip.ZipException: duplicare la voce: antlr/ANTLRError.class a java.util.zip.ZipOutputStream.putNextEntry (ZipOutputStream.java:175) a java.util.jar.JarOutputStream.putNextEntry (JarOutputStream.java : 92) presso sun.tools.jar.Main.update (Main.java:508) a sun.tools.jar.Main.run (Main.java:185) a sun.tools.jar.Main.main (Main.java:1044)

Tutte le idee?

risposta

8

Stai cercando di fare la cosa giusta, ma il file jar è problematico - ha la stessa voce due volte :((Questo è legale per un file zip, ma non molto utile - e come puoi vedere, rende jar lamentano.)

Se si esegue

jar tvf antlrworks-1.2.3.jar > contents 

e poi guardare il contents file generato vedrete che ci sono vari file duplicati. probabilmente si dovrebbe segnalarlo al progetto di ANTLR (dopo aver controllato non lo sanno già)

Come soluzione alternativa, puoi estrarre il contenuto del file jar, rimetterlo in ordine e quindi avrai un file jar "funzionante" che puoi aggiornare. (Se hai solo bisogno di farlo una volta, puoi semplicemente estrarre, inserire il file che desideri e poi svuotare l'intero lotto piuttosto che aggiornarlo in seguito.)

1

Puoi fare la stessa operazione con lo Ant jar task .

<jar duplicate="preserve" jarfile="..."> 
    your files 
</jar> 

l'attributo duplicato con il valore di conservazione si occuperà delle voci duplicate.

As mentioned here, l'attributo di aggiornamento con il valore “preservare” fa dire che esistono duplicati, in questa forma:

aPath/aFile already added, skipping 

Se il file è in cima alla lista del compito vaso deve prendere tp accumulo stesso, il tuo nuovo file sarà preso in considerazione.

0

Se sei su OS X, prova l'applicazione Jar Inspector. L'ho usato per correggere un errore javascript in wicket. È possibile aprire un file jar e elenca tutti i contenuti. Passare al file che si desidera salvare (in questo caso, un file .js) e modificare il file, quindi salvare il contenuto e si occupa della modifica del file .jar. Non sono sicuro se questo funzionerebbe con i file .java o meno.

Problemi correlati