2014-09-22 18 views
14

Ho file .class e .java nell'archivio JAR. C'è un modo per estrarre solo i file .java da esso? Ho provato questo comando, ma non funziona:JAR - estrazione di file specifici

jar xf jar-file.jar *.java 
+0

Perché non devi solo estrarre tutti i file ed eliminare quelli che non ti servono? – Strikeskids

+0

Da dove viene questo JAR? Non è una buona pratica raggruppare i file sorgente e di classe nello stesso JAR ... – Puce

+0

Perché è una soluzione più brutta e più lenta. Ci sono circa 10000 file lì. – user3521479

risposta

17

È possibile utilizzare il comando unzip che accetta i caratteri jolly nelle sue argomentazioni (che non è il caso del comando jar). Qualcosa del genere dovrebbe fare il trucco (disclaimer: non testato)

unzip youFile.jar "*.java" 
+0

Grande! Funziona, grazie :) – user3521479

15

Dal source:

Per estrarre solo alcuni file da un file jar, fornire i loro nomi di file:

C:\Java> jar xf myFile.jar foo bar

L'utilizzo di caratteri jolly è una cosa di shell e non è necessario aspettarsi che funzioni quando estraendo da un file JAR (che, come hai capito, è il caso).

Cosa si può fare, è fornire un elenco dei file che si desidera estrarre, attraverso il @ modificatore:

jar xf my.jar @myfiles.lst 

dove myfiles.lst sarebbe:

com/my/MyClass.java 
com/my/MySecondClass.java 

Questo file potrebbe facilmente essere creato automaticamente con l'uso creativo di jar tvf, awk e il modello di estrazione desiderato. Lo lascerò come esercizio e/o un'altra domanda SO :-)

Oppure potresti usare unzip - un file JAR è fondamentalmente un file zip.

Cheers,

+0

Ok, lo so, questo è nella documentazione, ma jar supporta qualsiasi regex? Non l'ho trovato da nessuna parte:/ – user3521479

-1

Non ci dovrebbe essere alcun file .java * in un barattolo, solo i file di classe. Puoi controllare il contenuto del vaso eseguendo prima:

jar tvf jar-file.jar