Skompilowałem plik JAR i określiłem klasę główną w manifeście (użyłem funkcji Eclipse Export ). Wszystkie moje zależności znajdują się w katalogu z etykietą lib
. Wydaje się, że nie mogę uzyskać prostej odpowiedzi na temat sposobu wykonywania mojego pliku JAR, określając, że powinien on używać lib/*
jako ścieżki klas.
Próbowałem:
]$ java -jar -cp .:lib/* MyJar.jar
]$ java -cp .:lib/* -jar MyJar.jar
]$ java -cp .:lib/* com.somepackage.subpackage.Main
itp...
Każdy wyświetla błąd mówiąc:
Error: Could not find or load main class ....
lub NoClassDefFoundError
wskazuje, że biblioteki nie zostały znalezione.
Próbowałem nawet przerobić plik JAR i dołączyć lib
katalog i zawartość, ale nadal nie ma kości ...
Jak mogę uruchomić plik JAR z wiersza poleceń i określić ścieżkę klasy do użycia?
java
shell
command-line
classpath
SnakeDoc
źródło
źródło
Odpowiedzi:
Po określeniu
-jar
wówczas-cp
parametr zostanie zignorowany.Z dokumentacji :
Nie można także „dołączyć” potrzebnych plików jar do innego pliku jar (należałoby wyodrębnić ich zawartość i umieścić pliki .class w pliku jar)
Masz dwie możliwości:
lib
katalogu do manifestu (możesz tam użyć ścieżek względnych)-cp
:java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main
źródło
unzip MyJar.jar lib/*.jar
. Potem, jak sugerujesz, mogą startowaćjava -cp MyJar.jar:lib/* ...
Uruchom plik jar i określ ścieżkę klasy w następujący sposób:
jar_name.jar
to pełna nazwa pliku JAR, który chcesz wykonaćlibs/*
to ścieżka do plików JAR zależnościcom.test.App
to w pełni kwalifikowana nazwa klasy z pliku JAR zawierającegomain(String[])
metodęJar i zależny jar powinny mieć uprawnienia do wykonywania.
źródło
Możesz to zrobić w powłoce unixowej:
Możesz to zrobić w programie Windows PowerShell:
źródło
Alternatywnie możesz użyć manifestu, aby określić ścieżkę-klasę i klasę główną, jeśli chcesz, więc nie musisz używać
-cp
ani określać klasy głównej. W twoim przypadku zawierałby takie linie:Niestety, musisz przeliterować każdy plik jar w manifeście (nie jest to biggie, jak robisz to tylko raz, i możesz użyć skryptu do zbudowania pliku lub użyć narzędzia do budowania, takiego jak ANT, Maven lub Gradle). Odwołanie musi być katalogiem względnym lub bezwzględnym do miejsca, w którym uruchamiasz plik
java -jar MyJar.jar
.Następnie wykonaj to za pomocą
źródło
Możesz wykonać Runtime.getRuntime.exec (polecenie), aby ponownie uruchomić jar, w tym ścieżkę klas z argumentami.
źródło