2014-09-22 5 views
14

Ich habe .class und .java Dateien im JAR-Archiv. Gibt es eine Möglichkeit, nur .java-Dateien daraus zu extrahieren? Ich habe diesen Befehl versucht, aber es funktioniert nicht:JAR - Extrahieren bestimmter Dateien

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

Warum extrahieren Sie nicht einfach alle Dateien und löschen Sie die, die Sie nicht benötigen? – Strikeskids

+0

Woher kommt dieses JAR? Es ist keine gute Praxis, die Quell- und Klassendateien in derselben JAR zu packen ... – Puce

+0

Weil es hässlicher und langsamer ist. Da sind ungefähr 10000 Dateien. – user3521479

Antwort

17

können Sie den unzip Befehl verwenden, die Platzhalter in seinen Argumenten akzeptiert (was nicht der Fall des jar Befehls ist). So etwas sollte den Trick (Disclaimer: nicht getestet)

unzip youFile.jar "*.java" 
+0

Großartig! Es funktioniert, danke :) – user3521479

15

Vom source:

Um nur bestimmte Dateien aus einer JAR-Datei, liefern ihre Dateinamen zu extrahieren:

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

Verwenden von Platzhaltern ist eine Shell-Sache, und Sie sollten nicht erwarten, dass es funktioniert, wenn Extrahieren aus einer JAR-Datei (die, wie Sie festgestellt haben, der Fall ist).

Was Sie können tun, ist eine Liste der Dateien liefern Sie extrahieren möchten, über den @ Modifikator:

jar xf my.jar @myfiles.lst 

wo myfiles.lst wäre:

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

Diese Datei konnte einfach mit kreativer Verwendung von jar tvf, awk und Ihrem gewünschten Extraktionsmuster automatisch erstellt werden. Ich überlasse das als Übung und/oder eine andere SO-Frage :-)

Oder Sie könnten unzip verwenden - eine JAR-Datei ist im Grunde eine Zip-Datei.

Cheers,

+0

Ok Ich weiß es, das ist in der Dokumentation, aber unterstützt Jar irgendwelche Regexes? Ich habe es nirgendwo gefunden:/ – user3521479

-1

Es sollte keine * .java-Dateien in einem Glas sein, nur Klassendateien. Sie können den Inhalt des Jars zuerst überprüfen, indem Sie Folgendes ausführen:

jar tvf jar-file.jar