2012-02-08 10 views
5

Mam projekt, który zawiera zewnętrzny plik jar, podążyłem za tym łączem http://www.wikihow.com/Add-JARs-to-Project-Build-Paths-in-Eclipse-%28Java%29, aby dodać zewnętrzną ścieżkę Java. Następnie próbowałem skompilować mój kod w terminalu, jednak wciąż dostaję błąd o pliku jar, który nie istnieje.Jak skompilować projekt java z zewnętrznym plikiem jar w terminalu Linuksowym

napisałem następujące polecenia: (Obecnie jestem w katalogu projektu i istnieją trzy foldery o nazwie bin src i lib tam)

bash-3.2$ ls 
bin lib README.txt src 
bash-3.2$ javac -cp lib/jsoup-1.6.1.jar src/DayTradingStockBlog.java 
bash-3.2$ java -cp .:lib/jsoup-1.6.1.jar src/DayTradingStockBlog 
Exception in thread "main" java.lang.NoClassDefFoundError: src/DayTradingStockBlog (wrong name: DayTradingStockBlog) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
     at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
Could not find the main class: src/DayTradingStockBlog. Program will exit. 

Jak mam rozwiązać ten problem?

+0

Co * dokładnie * jest błąd powiedzenia? –

+0

A jak się kompilujesz? –

+0

pakiet org.jsoup nie istnieje import org.jsoup.Jsoup; – CanCeylan

Odpowiedz

9

Nigdy nie używasz ukośników, które są separatorami ścieżek, w wywołaniu do java (ale do javac). Jeśli src jest częścią deklaracji pakietu - w tym przypadku cała deklaracja pakiet, który założę się, że nie jest, byś zamiast:

java -cp .:lib/jsoup-1.6.1.jar src/DayTradingStockBlog 

używać kropki:

java -cp .:lib/jsoup-1.6.1.jar src.DayTradingStockBlog 

Ale Chyba to jest właśnie miejsce, w którym utworzono klasę, więc droga należy do ścieżki klasy:

java -cp .:lib/jsoup-1.6.1.jar:./src DayTradingStockBlog 

nie jesteś wolny, aby pominąć ścieżkę z nazwą klasy, i dołączyć go do ścieżki klasy, albo vice versa - musi to być fi t do deklaracji paczki.

Jeśli zadeklarujesz pakiet foo, (który ma znacznie więcej sensu niż SRC), imię i nazwisko klasa nie jest już DayTradingStockBlog ale foo.DayTradingStockBlog.

+0

+1 dla poprawnego użycia wywołania "klasy pakowanej" (za pomocą kropki). – asgs

1

użycie classpath (cp)

javac -cp %YOUR_JAR_LOCATION% myClass.java 
+0

możesz spojrzeć na edycję proszę – CanCeylan

+0

@CanCeylan przejdź do słownika KATALOG (brak folderów w systemie Linux) i podaj uprawnienia dostępu: chmod 777 ./jsoup-1.6.1.jar następnie ponownie uruchom javac – aviad

+0

@aviad That's nie problem. Nie chcesz, aby jego pozwolenie było 777, aby mieć bibliotekę w ścieżce klas. – asgs

2

oparciu o edycję, którą proponujemy, aby ująć wszystkie lokalizacje ścieżce klas w obrębie pojedynczych/podwójnych cudzysłowach. Oznacza to, że jest to podobne do:

java -cp '.:lib/jsoup-1.6.1.jar' src/myClass.

W systemie Linux elementy w ścieżce klas są oddzielone dwukropkiem (:) aw systemie Windows jest to średnik (;).

+0

atakujących-3,2 $ javac cp lib/jsoup-1.6.1.jar src/myClass.java atakujących-3,2 $ Java -cp.: lib/jsoup-1.6.1.jar src/myClass – CanCeylan

+0

próbowałem je do poleceń teraz, pierwszy pracuje jednak na drugim daje wyjątek w wątku „main” java.lang.NoClassDefFoundError: src/myClass (zła nazwa: myClass) – CanCeylan

+0

@CanCeylan To dlatego, że myClass nie jest pod pakietem src. Po prostu to wymyśliłeś. Po prostu zrób to myClass. – asgs

-2

należy umieścić plik Java oraz plik jar w tym samym reż przykład: javac cp jdbc.jar myClass.java to działa na mnie

+1

To nie jest przydatne, przypuśćmy, jeśli masz wiele programów korzystających z tego samego zewnętrznego JAR-a, czy robisz za każdym razem kopię JAR? – CyprUS

Powiązane problemy