Jak dodawać pliki JAR podczas kompilacji?

Mam następujące w pliku java (MyRtmpClient.java): {]}

import org.apache.mina.common.ByteBuffer;

I ByteBuffer znajduje się wewnątrz pliku JAR (oczywiście z odpowiednią strukturą katalogów). Ten plik jar i inne, których potrzebuję, znajdują się w tym samym katalogu co .plik java.

Następnie kompiluję z linii:

javac -cp ".;*.jar" MyRtmpClient.java

Ale dostaję błąd:

MyRtmpClient.java:3: package org.apache.mina.common does not exist
import org.apache.mina.common.ByteBuffer;

Jak mogę włączyć pliki jar do mojego projektu?

Author: djangofan, 2009-06-30

9 answers

Twój wiersz poleceń jest poprawny, ale są pewne względy:

  • musisz mieć javac > = 1.6, ponieważ tylko w tej wersji kompilator przetwarza " * " jako różne pliki JAR.
  • musisz mieć System Windows, ponieważ "; "jest separatorem ścieżek tylko dla tego systemu operacyjnego (nie działa na Uniksie, separatorem ścieżek na Uniksie jest":").

Zakładam, że plik JAR ma odpowiednią strukturę katalogów, jak podałeś.

 27
Author: cd1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-14 19:04:51

Javac nie rozumie *.jar w argumencie classpath. Musisz wyraźnie określić każdy jar. np.

javac -cp ".;mina.jar" MyRtmpClient.java
 16
Author: Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-30 15:56:28

W javac JDK 6 i wyżej można użyć (Uwaga brak .jar):

javac -cp ".;*" MyRtmpClient.java

Cytuję javac-kompilator języka programowania Java

Dla specjalnej wygody, element ścieżki klasy zawierający nazwę podstawową * jest uważany za równoważny określaniu listy wszystkich plików w katalogu z rozszerzeniem .słoik lub .Słoik.

Na przykład, jeśli katalog foo zawiera a.jar oraz b.JAR, następnie element ścieżki klasy foo/* jest rozszerzony do A.jar;b.JAR, z tym że kolejność plików jar jest nieokreślona. Wszystkie pliki jar w podanym katalogu, nawet ukryte, są zawarte na liście. Wpis classpath składający się po prostu z * rozszerza się do listy wszystkich plików jar w bieżącym katalogu.

 11
Author: Maciej Matys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Jeśli masz do dyspozycji narzędzia find i tr (np. pracujesz pod Linuksem), możesz to zrobić:

javac -cp .:`find * -name "*.jar" | tr "\n" ":"` MyRtmpClient.java

Wszystkie pliki jar w bieżącym katalogu i wszystkie jego podkatalogi zostaną dodane (polecenie powłoki wyświetla wszystkie pliki jar i umieszcza dwukropki jako separatory między nimi).


Wyjaśnienie:
  • para backtików ( ` ) oznacza polecenia powłoki do wykonania,
  • find * -name "*.jar" wyszukuje i wyświetla wszystkie jar w hierarchii whose root is current folder,
  • pionowy pasek ( | ) is pipe; łączy wyjście find z wejściem następnego polecenia,
  • tr "\n" ":" zastępuje wszystkie znaki newline znakami dwukropek.
 9
Author: plesiv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-29 19:42:25

W Twoim przypadku myślę, że JAVAC nie może znaleźć pliku jars.

Proszę spróbować:

PROJECT_PATH
- lib\a.jar
- src\package\b.java

cd @PROJECT_PATH

javac -classpath lib\a.jar src\package\b.java
 8
Author: thanhduyspkt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-11 23:16:31

Prawdopodobnie poniżej składnia będzie działać na komendzie dos Windows

javac -cp ".;first.jar;second.jar;third.jar" MyRtmpClient.java
 4
Author: shashank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-13 18:21:24

W Javie 8 opcja ".; * "itd. które są wymienione powyżej nie wydają się działać. Próbowałem i znalazłem, że : javac -cp '<location of jars>/*' MyRtmpClient.java

Działa:

<location of jar> może być / usr / local/ classes / * lub / home / developer/MyProject / *

 2
Author: Ankush,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-08 16:09:35

Spróbuj włączyć plik jar w linii poleceń tak:

Javac MyRtmpClient.Java ByteBuffer.jar

 -2
Author: blispr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-30 15:54:11

Nie można używać -cp z Javac . Musisz zamiast tego użyć -classpath (zakładając, że pozostałe ustawienia są poprawne).

 -2
Author: Rewinna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-26 07:42:57