Problem z dodaniem Classpath

0

Poczytałem trochę na necie i wydaje mi się że robię identycznie jak piszą a wikipedii a jednak wywala mi błąd z parametrami.

Otóż korzystałem cały czas z NetBeansa i ścieżkę dodałem z plikiem jar w projekcie. Jednak teraz chcę skompilować ten projekt na innej maszynie i chcę dodać do ścieżki całe archiwum jar - zbiór bibliotek.

więc piszę:

java -classpath /home/praca/loader;/home/praca/loader/lib/commons-net-20070724.jar

wyskakuje standard czyli:

Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)

where options include:
-d32 use a 32-bit data model if available
(...)
-javaagent:<jarpath>[=<options>]
load Java programming language agent, see java.lang.instrument
-splash:<imagepath>
show splash screen with specified image
invalid file (bad magic number): Exec format error

Dzięki za pomoc bo już trochę się z tym czymś męczę.

0

nie podales w ogóle sciezki do pliku java, który chcesz uruchomić

0

Zrobiłem tak:
java -classpath /media/sda3/Programowanie/Java/Aplety/Loader/lib/commons-net-20070724.jar/org/apache/commons/net/ftp/FTPClient

oraz tak:

java -classpath /media/sda3/Programowanie/Java/Aplety/Loader/lib/commons-net-20070724.jar/org/apache/commons/net/ftp/FTPClient.class

oraz tak

/media/sda3/Programowanie/Java/Aplety/JasperLoader$ java -classpath /media/sda3/Programowanie/Java/Aplety/Loader/lib/FTPClient

oraz tak

/media/sda3/Programowanie/Java/Aplety/JasperLoader$ java -classpath /media/sda3/Programowanie/Java/Aplety/Loader/lib/FTPClient.class

Dwie ostatnie metody dotyczą sytuacji jak wypakowałem ten plik z archiwum jar i wkleiłem w odpowiednie miejsce.

Już nie mam pomysłu co ja robię źle. :(

Czy można dodać import z plikiem klasy bezpośrednio, bo zrobiłem tak import "FTPClient"; i wywalił błędy :(

Proszę o pomoc :)

Dziękuje

0

Kam683 napisał ci co robisz źle - nie podajesz głównej klasy , jest wiele sposobów uruchamiania JRE:
jeżeli nie trzeba zmieniać classpath i klasy leżą luzem

java nazwa_głównej_klasy

jeżeli nie trzeba zmieniać classpath i klasy są zapakowane do jara

java -jar nazwa_pliku_jar

jeżeli trzeba zmienić classpath i klasy leżą luzem

java -cp lista_katalogów nazwa_głównej_klasy

jeżeli trzeba zmienić classpath i klasy są zapakowane do jara

java -cp ista_katalogów -jar nazwa_pliku_jar
0

Generalnie chodzi o to abym mógł skorzystać z klasy FTPClient w moim programie. Może moim postępowaniem trochę zamieszałem. Wiem jak uruchomić już "gotowy" program .class ale ja nie potrafię skompilować źródła w którym używam instancji klasy FTPClient.

Do tej pory używałem IDE jednak teraz mogę skorzystać jedynie z javac. Wcześniej dodałem do lib mój plik .jar w ustawieniach projektu. Teraz próbuje skompilować ten sam program bez ide.

Dzięki za cierpliwość :)

0

Do kompilacji służy polecenie javac

javac -cp lista_katalogow_i_plikow_jar nazwa_klasy
0

To może inaczej:P
Wiem jak kompilować za pomocą javac:

To może ktoś mi napiszę całkowie polecenie abym mógł skorzystać ze zbioru bibliotek.

Plik źródłowy który chcę skompilować nazywa się JasperImagesUploader.java a plik jar który zawiera plik .class nazywa się commons-net-20070724.jar. Plik z którego chcę skorzystać nazywa się: FTPClient.class i jest w archiwum jar pod ścieżką: (...).jar -> /org/apache/commons/net/ftp/FTPClient.class

Więc wpisuje do konsoli tak:

java -cp commons-net-20070724.jar JasperImagesUploader.java
Exception in thread "main" java.lang.NoClassDefFoundError: JasperImagesUploader/java
Caused by: java.lang.ClassNotFoundException: JasperImagesUploader.java
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
praca@tomek-laptop:/media/sda3/Programowanie/Java/Aplety/JasperLoader/kompiluje$

To jest tylko jeden przykład z wielu kombinajci jakie dokonałem :(

0

Pewnie też się da wkleić ten plik jar w pewne miejsce w systemie aby Java widziała go tak jak "standardowe pakiety".

0

To co wpisujesz na konsoli

java -cp commons-net-20070724.jar JasperImagesUploader.java

to nie jest polecenie kompilacji, to jest uruchomienie JRE, klasą główną jest klasa o nazwie java z pakietu JasperImagesUploader
P.S. mam nieodparte wrażenie, że nie odróżniasz poleceń java i javac. </b>

0

Tak javac pomyliłem się to wynikło z pośpiechu...

0

Super działa :D

zrobiłem javac -cp plik.jar plik2.java

Zapakowałem to wszystko ładnie do paczki jar poleceniem: jar -cfv aplecik.jar *.class
A następnie podpisałem poleceniem: jarsigner -keystore soft.store aplecik.jar mroot // to działa

Uruchomiłem aplet w przeglądarce jednak po dojściu do fragmentu kodu: FTPClient ftpClient = new FTPClient();

Aplet nie wykonuje tego co ma zrobić, czyli połączyć się z FTP-em a potem zerwać połączenie. Dodam że na początku ten aplet był programem i wszystko działało. Aplet potrafi przeglądać dane zdjęcie z katalogu usera więc chyba jest ok jeżeli chodzi o podpisanie - ale głowy nie dam!

Pomiędzy kodem który łączy się z serwerem wyświetlam tekst łącze się z serwerem i połączenie ukończone. wyświetla się jedynie ten pierwszy.

Teraz nie wiem co generalnie się dzieje, czy aby uruchomić mój aplet dalej muszę korzystać z FTPClient.class w pliku jar, czy po prostu Java blokuje aby mój aplet nie mógł się łączyć z serwerem ??

Proszę o pomoc :)

0

Aplet może się połączyć tylko z serwerem z którego został pobrany.
Robiłem kiedyś eksperymenty z odczytywaniem przez aplet plików graficznych znajdujących się na komputerze użytkownika. Jeżeli podałem dokładną lokalizację pliku (C:\ble\Bleble\obrazek.jpg), to FF i IE otwierały plik, Opera nie. Odczytanie zawartości wskazanego katalogu nie powiodło się na żadnej przeglądarce.

0

Applet i server ftp będą na tej samej maszynie. Odkryłem już dlaczego mój applet nie łączy się z serwerem.
Otóż jak wspominałem mam dwie wersje tego samego programu czyli jeden "normalny" program i applet. Tylko że program pisałem w Netbeans i on wszystko robił za mnie.

Teraz postanowiłem "ręcznie" go skompilować czyli dałem javac -cp commons-net-20070724.jar ImagesUploader.java

Aby go uruchomić dałem java ImagesUploader i działało jednak gdy klikłem w Wyślij na konsoli pokazało się:

at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Caused by: java.lang.ClassNotFoundException: org.apache.commons.net.ftp.FTPClient
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
... 26 more

Czyli jak widać nie zna klasy FTPClient

Więc chyba też trzeba załadować klasę FTPClient

W przykładach poprzednich co pisał: Bogdans chyba nie ma odpowiedniego polecenia bo tamte ładują odpowiednią klasę z określonej lokalizacji.

Nie wiem czy dobrze kombinuję.

Dziękuje za Posty :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1