Ubuntu'daki bir klasör için CLASSPATH değişkeni nasıl ayarlanır


16

Ben export CLASSPATH=/usr/local/java/tools.jar:$CLASSPATHCLASSPATH için tools.jar ekleyeceğini biliyorum , ama CLASSPATH için klasör ayarlamak istiyorum

bunun gibi

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

ama işe yaramıyor.

Yanıtlar:


11

İlk olarak, genel olarak, env değişkenini ayarlamak CLASSPATHgenellikle çözdüğünden daha fazla soruna neden olur - çünkü tüm uygulamaların aynı sınıf yolunu istemesi / ihtiyacı yoktur ve sınıf yoluna istenmeyen veya hatta kavanozlar dahil edildiğinde genellikle kırılır. Bir java uygulaması sadece gereken minimum sayıda kavanoz içermelidir, daha fazla, daha az değil.

Eğer özgü varsa, bunu bireysel uygulamalar sınıf yolu sonra genellikle komut satırı seçeneği tercih edilir, ayarlanmış olması gerekir: java -cp path1:path2:.... Masaüstü simgeleri bu seçenekleri içerecek şekilde komutlarını değiştirebilir veya kabuk komut dosyaları bu seçenekleri içerecek şekilde değiştirilebilir.

Bununla birlikte (ve kuralda her zaman istisnalar olduğu için), java sürümüne bağlı olarak (bu, java 6 veya daha yeni bir sürümü gerektirir), sınıf yoluna bir kavanoz dizininin " *" eklenerek ekleneceğini belirtebilirsiniz. bir dizinin sonunda; örneğin, aşağıdakiler:

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

Anlamına geliyor:

  • /dir1/foo.jar - (tek kavanoz) sınıfyoluna eklenecektir;
  • /dir2/dir3- bu dizindeki tüm jarlenmemiş sınıflar sınıfyoluna eklenecektir (uygun paket yapısında com.my.Foo.classolmalı ; örneğin içinde olmalıdır /dir2/dir3/com/my/Foo.class)
  • /dir5/dir6/*- Bu dizindeki tüm kavanozlar (ör. /dir5/dir6/*.jar) sınıfyoluna eklenir. Bu " *" bir joker karakter değildir (kullanamazsınız f*.jarve hatta kullanamazsınız *.jar); "tüm kavanozları ekle" yi gösteren özel bir karakter

Genel olarak, uygulamanın sınıf yoluna tam bir kavanoz dizini eklemeniz gerekiyorsa, uygulama doğru bir şekilde paketlenmedi. Bunun yerine, uygulamanın bağlı olduğu kavanoz listesini içeren bir manifest olması gerekir. Ya da en azından, sınıf yolunuza sadece bir kavanoz eklenmelidir ve bu kavanoz tezahüründe bazı alt dizindeki tüm kavanoz listesini gösterebilir.


Bunu ubuntu 12.04'te bulmak 5 saatten fazla sürüyor. Bir dosyayı derleyip sınıfı çalıştırdıktan sonra, iki şey önemlidir. 1. Sınıfınızda paketi kullanıp kullanmadığınız. Ve paket üst klasöründe "java -cp. ClassName" kullanmanız gerekir. 2. ".:" Gibi "java -cp.: / Usr / lib / jvm / java-1.6.0-openjdk-i386 / jre / lib / *: / dir2 / jarlib / *" kullanmalısınız.
zhihong

@zhihong, aslında sınıf yolunuzu yapılandıran kullanılan oluşturma aracına ertelemesine izin veren netBeans gibi bir IDE kullanmayı düşünmelisiniz. Netbeans'te, maven veya gradle (veya karınca) kullanarak yeni bir proje oluşturun (ancak bağımlılıklarla uğraşırken bu çok karmaşıklaşır (ayrıca bakınız: sarmaşık yerine tercih ettiğim maven karınca görevleri)). Gradle şu anda 'sıcak' şey, fwiw; denemelisin. Ayrıca, (1) her zaman paket isimlerini kullanmalısınız; ve (2) sınıfların sınıf yolundaki jvm dizinine dahil edilmesine asla gerek yoktur; zaten "boot" sınıfyolundalar.
michael

önerin için teşekkürler. Aslında, eclipse kullanıyorum ve kod orada doğru çalışır, ama ben terminalde çalıştırdığınızda, sonra "ClassNotFoundException" var. Harici lib / jar eklemenin birçok yolunu denedim, ama hepsi başarısız oldu. Son olarak, komut satırına jvm dizini ve harici lib / jar ekleyerek çalışır. Ama bugün denedim, haklısın, jvm dizinine gerek yok.
zhihong

2

Eğer sınıfyolunu kalıcı olarak ayarlamak istiyorsanız 1) java'nın nerede kurulduğunu öğrenin .. "whereis java" kullanabilirsiniz openjdk-7/6 / usr / lib / jvm / .....

2) / etc / ortamında CLASSPATH kurmamız gerekiyor

  sudo gedit /etc/environment

3) aşağıdaki beğenileri ekleyin .. (YAZDIRKEN HERHANGİ BİR ALANI DON) (java sürümünüze ve kurulumunuza göre özelleştirin) (bu ana yol açık jdk 7 içindir)

   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

dizini ":" ile ayır


Neden herkes sınıf yollarına "{JAVA_HOME} / lib" ekliyor? Gerekli değil, hatta iyi bir fikir. Bu nedenle, env CLASSPATH öğesini kabuk komut dosyasında olmadıkça, yalnızca bu komut dosyası için ayarlamadığınız takdirde kötü bir fikirdir, bu durumda, java için "-cp" komut satırı seçeneği hala tercih edilir.
michael

0

açık terminal ve tip

sudo nano ~ / .bashrc

ihtiyaç duyduğunuz tüm ihracatları ekleyin ...

dışa aktar JAVA_HOME = / usr / local / java / jdk1.6.0_06 (yolunuz)

dışa aktar ANT_HOME = / opt / ant / apache-ant-1.9.4

son olarak değişikliklerin etkili olması için terminali yeniden başlatın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.