2014-09-22 17 views
14

Mam pliki .class i .java w archiwum JAR. Czy istnieje sposób na wyodrębnienie z niego tylko plików .java? Próbowałem tego polecenia, ale to nie działa:JAR - wyodrębnianie określonych plików

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

Dlaczego po prostu nie wyodrębnisz wszystkich plików i nie usuniesz tych, których nie potrzebujesz? – Strikeskids

+0

Skąd się bierze ten JAR? Nie jest dobrą praktyką pakowanie plików źródłowych i klasowych w tym samym JAR ... – Puce

+0

Ponieważ jest to brzydsze i wolniejsze rozwiązanie. Jest tam około 10000 plików. – user3521479

Odpowiedz

17

Można użyć polecenia unzip który akceptuje symboli wieloznacznych w swoich argumentów (co nie jest w przypadku komendy jar). Coś takiego powinno wystarczyć (Uwaga: nie testowane)

unzip youFile.jar "*.java" 
+0

Świetnie! Działa, dzięki :) – user3521479

15

Z source:

Aby wyodrębnić tylko niektóre pliki z pliku jar, dostarczają ich nazw:

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

Korzystanie z symboli wieloznacznych to rzecz skorupkowa i nie należy oczekiwać, że zadziała, gdy wyodrębniając z pliku JAR (który, jak sobie uświadomiłeś, jest w tym przypadku).

Co może zrobić, to dostarczyć listę plików, które chcesz wyodrębnić, poprzez @ modyfikatora:

jar xf my.jar @myfiles.lst 

gdzie myfiles.lst byłoby:

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

Ten plik może łatwo tworzyć automatycznie z kreatywnym wykorzystaniem jar tvf, awk i żądanego wzoru ekstrakcji. Zostawię to jako ćwiczenie i/lub inne pytanie SO :-)

Albo możesz użyć unzip - plik JAR jest w zasadzie plikiem zip.

Cheers,

+0

OK Wiem, to jest w dokumentacji, ale czy jar obsługuje wszystkie wyrażenia regularne? Nigdzie go nie znalazłem:/ – user3521479

-1

nie powinno być jakieś pliki * .java w słoiku tylko pliki klasowe. Najpierw możesz sprawdzić zawartość słoja, uruchamiając:

jar tvf jar-file.jar 
Powiązane problemy