Jak dołączyć pliki jar do pliku java i skompilować je w wierszu poleceń

121

Mam 3 pliki jar i plik .java, który zależy od tych plików jar. Jak skompilować plik .java z tymi plikami jar przy użyciu wiersza polecenia?

user1177567
źródło
9
wpisz „javac -help”
Sean Patrick Floyd
2
mam nadzieję, że to ci pomoże ...
Fahim Parkar
2
Uwaga dla siebie: musisz użyć flagi -cp / -classpath przed nazwą pliku java, który chcesz uruchomić, w przeciwnym razie flaga zignoruje. java -cp ".;magic.jar" Foojest ok java Foo -cp ".;magic.jar"nie jest.
Dmitry

Odpowiedzi:

108

Pliki jar można dołączyć do polecenia „javac” za pomocą opcji „-cp”.

javac -cp ".:/home/path/mail.jar:/home/path/servlet.jar;" MyJavaFile.java

Zamiast „-cp” możesz też użyć „-classpath”

javac -classpath ".:/home/path/mail.jar:/home/path/servlet.jar:" MyJavaFile.java

Możesz dołączyć pliki jar za każdym razem, gdy kompilujesz, ustawiając poprawnie zmienną środowiskową „CLASSPATH”. Zmienna środowiskowa będzie przechowywać ścieżkę do plików JAR i klas, które mają być używane do kompilowania / wykonywania dowolnego pliku java. Nie będziesz musiał dołączać poszczególnych słoików za każdym razem, gdy kompilujesz plik.

Różne komputery mają różne metody ustawiania ścieżki klas jako zmiennej środowiskowej. Polecenia dla systemu Windows, Linux itp. Są różne.

Więcej szczegółów znajdziesz na tym blogu .

http://javarevisited.blogspot.com/2011/01/how-classpath-work-in-java.html
kensen john
źródło
7
javac -classpath ".:/home/path/mail.jar;/home/path/servlet.jar" MyJavaFile.javapracował dla mnie. Używałem mac. Czytałem gdzieś, że ':' jest używane dla unixa.
Sri
2
Użyłem tego polecenia, ale kiedy próbowałem uzyskać dostęp do klasy obecnej w pliku jar, otrzymuję ClassNotFoundException.
Mohammed Rampurawala
3
Co ma .:zrobić? przepraszam, jeśli to głupie pytanie, ale nie jest to dla mnie oczywiste.
Miranda
1
@kensen. Błąd literowy. zastąp: (dwukropek) średnikiem (;)
Pankaj Shinde
Powyższe nie działało dla mnie na ubuntu. Próbowałem bez cudzysłowu i zadziałało. Dawny. javac -cp .:/home/path/mail.jar:/home/path/servlet.jar; MyJavaFile.java
Alfaz Jikani,
24

Spróbuj w systemie Linux

javac -cp jarfile source file 

PRZYKŁAD: -

javac  -cp .:/jars/* com/template/*.java
Jamsheer
źródło
Kiedy próbuję PRZYKŁAD: - , z .:/jarszastąpieniem katalogiem, w którym znajdują się moje pliki JAR, pojawia się komunikat o błędzie javac: invalid flag: /location/of/first/jar/file.jar.
Arturo don Juan,
stackoverflow.com/questions/27915204/ ... proszę odnieść się do tego, to może rozwiązać twój problem
Jamsheer
20

Składnia będzie działać na komendzie dos w systemie Windows:

javac -cp ".;first.jar;second.jar;third.jar" MyJavaFile.java
user2573056
źródło
4
Po pomyślnym wykonaniu powyższego polecenia, jak uruchomić plik klasy java?
Yash Agrawal
java -cp first.jar: second.jar: third.jar Mój plik
Kryszna
15

Spróbuj dodać wszystkie pliki jar zależności do ścieżki klasy za pomocą ustawień zmiennych środowiskowych lub wykonaj poniższe czynności:

  1. Otwórz wiersz polecenia.
  2. Zmień katalog na lokalizację pliku Java, który chcesz skompilować.
  3. Ustaw ścieżkę klas dla plików jar zależności, jak pokazano poniżej:

    set classpath=C:\Users\sarath_sivan\Desktop\jars\servlet-api.jar; C:\Users\sarath_sivan\Desktop\jars\spring-jdbc-3.0.2.RELEASE; C:\Users\sarath_sivan\Desktop\jars\spring-aop-3.0.2.RELEASE;

  4. Teraz możesz skompilować plik java. (Polecenie: javac YourJavaFile.java)

Mam nadzieję, że to rozwiąże problem z zależnościami.

Sarath Kumar Sivan
źródło
15

Poniżej znajdują się kroki,

  1. Skopiuj wszystkie pliki jar i plik .java do tego samego folderu (łatwo będzie wymienić nazwy plików zamiast wymieniać długą ścieżkę. Możesz jednak przechowywać pliki jar i .java w osobnych folderach).

  2. Kompilować,

    javac -cp .:<file_1_name>.jar:<file_2_name>.jar <prog_name>.java
  3. Wykonać,

    java -cp .:<file_1_name>.jar:<file_2_name>.jar <prog_name>

Mam nadzieję, że to pomoże!

imbond
źródło
1
Dziękuję również za pokazanie, jak wykonać. Co znowu robi dwukropek? To bieżący katalog i separator plików?
ThisClark,
Tak, to bieżący katalog i uniksowy separator plików (w systemie Windows jest to średnik).
MathuSum Mut
6

Spowoduje to utworzenie pliku .class:

javac -classpath "[jarname with specified path]" [java filename]

Spowoduje to wykonanie pliku klasy:

java -cp [jarname with specified path]: [java filename]
Isaq
źródło
1
Polecenie java wyświetla błąd Spowodowany przez: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory Chcę skompilować ** javac -classpath "/home/scorncer/Downloads/spark-core-2.3.jar" MyFile.javai ** uruchomić java -cp /home/scorncer/Downloads/spark-core-2.3.jar: MyFile.java also i tried java -cp /home/scorncer/Downloads/spark-core-2.3.jar: MyFile
Yash Agrawal
5

Spróbuj tego.

javac -cp .:jars/jar1:jars/jar2:jars/jar3 com/source/*.java
Shravya
źródło
2

Musisz określić zależności w czasie kompilacji, a także w czasie wykonywania

Aby skompilować, użyj tego formatu

javac -cp "*.jar;classfile_path" filename.java

Przykład:

javac -cp "ojdbc6.jar;c:\programs" Main.java
ArockiaRaj
źródło
Ta odpowiedź, chociaż jest poprawna, tak naprawdę nie wydaje się dodawać niczego, czego inne odpowiedzi już nie mówią. Jeśli istnieje jakaś kluczowa różnica między tą a innymi odpowiedziami, lepiej byłoby wyjaśnić, dlaczego Twoja odpowiedź jest inna.
DaveyDaveDave
Wspomniałeś o określaniu zależności w czasie wykonywania, a także podczas kompilacji, ale nie wyjaśniłeś, jak je określić w czasie wykonywania.
Michael Fulton,
1

czasami działa następująca zmiana:

java -cp ".;%CLASSPATH%" classfilename 

Uwaga: W systemie Windows. $CLASSPATHZamiast tego do korzystania z systemu Linux .

Guru
źródło
1
javac -cp jars/jar1:jars/jar2:jars/jar3 abc.java
pratap
źródło
5
Chociaż ten kod może rozwiązać problem, w tym wyjaśnienie, jak i dlaczego to rozwiązuje problem, naprawdę pomogłoby poprawić jakość twojego posta i prawdopodobnie zaowocowałoby większą liczbą pozytywnych głosów. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a nie tylko osoba, która zapyta teraz. Proszę edytować swoje odpowiedzi, aby dodać wyjaśnień i dać wskazówkę co zastosować ograniczenia i założenia.
podwójny sygnał
0

Jeśli używasz Ubuntu:

/opt/JavaServices/sqlite $ export CLASSPATH=/opt/JarFiles/XXXX.jar:/opt/JarFiles/XXXX.jar:/opt/JavaServices/;javac SQLiteSample.java

Przejdź do lokalizacji folderu (poza strukturą pakietu)

/opt/JavaServices $ export CLASSPATH=/opt/JarFiles/XXXXX.jar:/opt/JarFiles/XXXXX.jar:/opt/JavaServices/;java sqlite.SQLiteSample

Uwaga: zobacz lokalizacje plików i nazwy pakietów

srihari
źródło
-1

Dla Windowsa

  1. połącz się z katalogiem, w którym znajdują się pliki java w wierszu polecenia.
  2. ustaw ścieżkę klasy (tutaj d = nazwa folderu) set classpath = C: \ d1 \ d2 \ d3 \ d4 \ d5 \ d6 \ d7.jar;
  3. naciśnij enter i
  4. teraz skompiluj plik java javac nazwa_pliku.java
zwiastun
źródło