Jak ustawić zmienną CLASSPATH dla folderu w Ubuntu

16

Wiem, że export CLASSPATH=/usr/local/java/tools.jar:$CLASSPATHdoda tools.jar do CLASSPATH, ale chcę ustawić folder na CLASSPATH

lubię to

export CLASSPATH=/usr/local/java/lib/:$CLASSPATH

ale to nie działa.

Ramesh Kotha
źródło

Odpowiedzi:

11

Po pierwsze, ogólnie ustawienie env var CLASSPATHzwykle powoduje więcej problemów niż rozwiązuje - ponieważ nie wszystkie aplikacje chcą / potrzebują tej samej ścieżki klasy, i często psują się, gdy w ścieżce klasy znajdują się niepożądane lub nawet niepotrzebne słoiki. Aplikacja Java powinna zawierać tylko minimalną wymaganą liczbę słoików, nie więcej, nie mniej.

Kiedy masz konkretne, indywidualne aplikacje, które wymagają, że ścieżka klasy zostać ustawiona, wtedy jest korzystne zazwyczaj opcja wiersza polecenia: java -cp path1:path2:.... Ikony pulpitu mogą zostać zmienione, aby uwzględnić te opcje, lub skrypty powłoki można zmodyfikować, aby uwzględnić te opcje.

Biorąc to pod uwagę (a ponieważ zawsze są wyjątki od reguły), to w zależności od wersji java (wymaga java 6 lub nowszej), można określić, że do ścieżki klas należy dodać cały katalog słoików, dodając „ *” na końcu katalogu; np .:

 /dir1/foo.jar:/dir2/dir3:/dir5/dir6/*:etc...

Znaczy:

  • /dir1/foo.jar - (pojedynczy słoik) zostanie dodany do ścieżki klasy;
  • /dir2/dir3- wszystkie niezagregowane klasy w tym katalogu zostaną dodane do ścieżki klasy (musi mieć odpowiednią strukturę pakietu; np. com.my.Foo.classmusi być w /dir2/dir3/com/my/Foo.class)
  • /dir5/dir6/*- wszystkie słoiki w tym katalogu (tj. /dir5/dir6/*.jar) zostaną dodane do ścieżki klasy. Pamiętaj, że ten „ *” nie jest symbolem wieloznacznym (nie możesz go użyć, f*.jara nawet *.jar); jest to znak specjalny wskazujący „dodaj wszystkie słoiki”

Ogólnie rzecz biorąc, jeśli musisz dodać cały katalog słoików do ścieżki klasy aplikacji, aplikacja nie została poprawnie spakowana. Aplikacja powinna raczej zawierać manifest zawierający listę słoików, od których zależy. Lub przynajmniej jeden słoik powinien zostać dodany do ścieżki klasy, a ten słoik może mieć w swojej manifestu całą listę słoików w pewnym podkatalogu.

Michael
źródło
Odkrywanie tego w Ubuntu 12.04 zajmuje mi ponad 5 godzin. Po skompilowaniu pliku i uruchomieniu klasy ważne są dwie rzeczy. 1. Czy korzystasz z pakietu w swojej klasie. I musisz użyć „java -cp. ClassName” w folderze nadrzędnym pakietu. 2. Musisz użyć „.:” Jak „java -cp.: / Usr / lib / jvm / java-1.6.0-openjdk-i386 / jre / lib / *: / dir2 / jarlib / *”.
zhihong
@zhihong powinieneś rozważyć użycie IDE, takiego jak netbeans, pozwalając mu odroczyć się do używanego narzędzia do budowania, które faktycznie konfiguruje twoją ścieżkę klas. W Netbeans skonfiguruj nowy projekt za pomocą maven lub gradle (lub mrówki - ale staje się to zbyt skomplikowane, gdy radzisz sobie z zależnościami (patrz też: zadania maven mav, które wolę niż bluszcz)). Gradle jest obecnie „gorącą” rzeczą, fwiw; powinieneś spróbować. Ponadto (1) należy zawsze używać nazw pakietów; oraz (2) nigdy nie ma potrzeby włączania klas do katalogu jvm w ścieżce klasy; są już w ścieżce klasy „boot”.
Michael
dzięki za Twoją sugestię. Właściwie używam zaćmienia, a kod działa tam poprawnie, ale kiedy uruchamiam go w terminalu, to dostaję „ClassNotFoundException”. Próbowałem wiele sposobów, aby dodać zewnętrzny lib / jar, ale wszystkie nie powiodły się. Wreszcie działa poprzez włączenie katalogu jvm i zewnętrznego lib / jar do wiersza poleceń WITH. Ale próbowałem dzisiaj, masz rację, katalog jvm nie jest potrzebny.
zhihong
2

jeśli chcesz ustawić ścieżkę klasy na stałe, to 1) dowiedz się, gdzie jest zainstalowana java. Możesz użyć „whereis java” openjdk-7/6 znajduje się w / usr / lib / jvm / .....

2) musimy skonfigurować CLASSPATH w / etc / environment

  sudo gedit /etc/environment

3) dodaj następujące polubienia .. (NIE POZOSTAWIAJ ŻADNYCH PRZESTRZENI PODCZAS PISANIA) (dostosuj zgodnie z wersją Java i instalacją) (ta ścieżka główna jest przeznaczona dla otwartego jdk 7)

   JAVA_HOME="/usr/lib/jvm/java-7-openjdk-i386/bin"

   export JAVA_HOME

   CLASSPATH=".:/usr/lib/jvm/java-7-openjdk-i386/lib:/home/laptop/Desktop/a2"

   export CLASSPATH

oddziel katalog przez „:”

rightkushagra
źródło
Dlaczego wszyscy dodają „{JAVA_HOME} / lib” do ścieżki klasy? To nie jest konieczne, ani nawet dobry pomysł. Z tego powodu ustawienie env CLASSPATH jest również złym pomysłem, chyba że jest to skrypt powłoki, tylko dla tego skryptu, w którym to przypadku opcja wiersza poleceń „-cp” na java byłaby nadal preferowana.
Michael
0

otwórz terminal i typ

sudo nano ~ / .bashrc

dodaj wszystkie potrzebne eksporty, takie jak ...

eksportuj JAVA_HOME = / usr / local / java / jdk1.6.0_06 (twoja ścieżka)

eksport ANT_HOME = / opt / ant / apache-ant-1.9.4

wreszcie zrestartuj terminal, aby zmiany odniosły skutek

kolega
źródło