Bagaimana mengatur variabel CLASSPATH untuk folder di Ubuntu

16

Saya tahu itu export CLASSPATH=/usr/local/java/tools.jar:$CLASSPATHakan menambahkan tools.jar ke CLASSPATH, tetapi saya ingin mengatur folder ke CLASSPATH

seperti ini

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

tetapi tidak bekerja.

Ramesh Kotha
sumber

Jawaban:

11

Pertama, secara umum, pengaturan env var CLASSPATHbiasanya menyebabkan lebih banyak masalah daripada yang dipecahkan - karena tidak semua aplikasi menginginkan / memerlukan classpath yang sama, & sering rusak ketika toples yang tidak diinginkan atau bahkan tidak dibutuhkan dimasukkan dalam classpath. Aplikasi java seharusnya hanya menyertakan jumlah minimum guci yang dibutuhkan, tidak lebih, tidak kurang.

Bila Anda memiliki tertentu, aplikasi individu yang melakukan mengharuskan classpath diatur, maka biasanya opsi baris perintah lebih disukai: java -cp path1:path2:.... Ikon desktop dapat mengubah perintahnya untuk menyertakan opsi ini, atau skrip shell dapat dimodifikasi untuk menyertakan opsi ini.

Yang sedang berkata (dan karena selalu ada pengecualian pada aturan), maka tergantung pada versi java (ini membutuhkan java 6 atau yang lebih baru), Anda dapat menentukan bahwa seluruh direktori guci ditambahkan ke classpath dengan menambahkan " *" di akhir direktori; misalnya, berikut ini:

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

Cara:

  • /dir1/foo.jar - (tabung tunggal) akan ditambahkan ke classpath;
  • /dir2/dir3- semua kelas un-jar'd dalam direktori ini akan ditambahkan ke classpath (harus dalam struktur paket yang tepat; misalnya, com.my.Foo.classharus berada di /dir2/dir3/com/my/Foo.class)
  • /dir5/dir6/*- semua stoples dalam direktori ini (yaitu, /dir5/dir6/*.jar) akan ditambahkan ke classpath. Perhatikan bahwa " *" ini bukan wildcard (Anda tidak bisa menggunakan f*.jaratau bahkan *.jar); itu adalah karakter khusus yang menunjukkan "tambahkan semua botol"

Secara umum, jika Anda harus menambahkan seluruh direktori toples ke classpath aplikasi, aplikasi itu tidak dibundel dengan benar. Sebaliknya, aplikasi harus memiliki manifes yang berisi daftar toples yang tergantung padanya. Atau paling tidak, hanya satu toples yang harus ditambahkan ke classpath Anda, dan toples itu dapat memiliki seluruh daftar toples dalam beberapa subdirektori.

michael
sumber
Butuh lebih dari 5 jam untuk mencari tahu ini di ubuntu 12.04. Setelah Anda mengompilasi file dan menjalankan kelas, dua hal penting. 1. Apakah Anda menggunakan paket di kelas Anda. Dan Anda perlu menggunakan "java -cp. ClassName" di folder paket induk. 2. Anda harus menggunakan ".:" Seperti "java -cp.: / Usr / lib / jvm / java-1.6.0-openjdk-i386 / jre / lib / *: / dir2 / jarlib / *".
zhihong
@ Zhihong Anda harus mempertimbangkan menggunakan IDE seperti netbeans, membiarkannya tunduk pada alat build yang digunakan, yang sebenarnya mengkonfigurasi classpath Anda. Di Netbeans, buat proyek baru menggunakan maven atau gradle (atau semut - tetapi ini menjadi terlalu rumit ketika berhadapan dengan dependensi (lihat juga: tugas semut maven, yang saya lebih suka daripada ivy)). Gradle saat ini adalah hal yang 'panas', fwiw; Anda harus mencobanya. Juga, (1) Anda harus selalu menggunakan nama paket; dan (2) tidak perlu menyertakan kelas dalam direktori jvm di classpath; mereka sudah ada di classpath "boot".
michael
terima kasih atas saran anda. Sebenarnya, saya menggunakan eclipse, dan kode berjalan dengan benar di sana, tetapi ketika saya menjalankannya di terminal, kemudian mendapat "ClassNotFoundException". Saya mencoba banyak cara untuk menambahkan lib / jar eksternal, tetapi semuanya gagal. Akhirnya, ini bekerja dengan memasukkan direktori jvm dan lib / jar eksternal dalam baris perintah DENGAN. Tapi, saya coba hari ini, Anda benar, direktori jvm tidak diperlukan.
zhihong
2

jika Anda ingin mengatur classpath secara permanen, maka 1) mencari tahu di mana java diinstal .. Anda dapat menggunakan "whereis java" openjdk-7/6 di / usr / lib / jvm / .....

2) kita perlu mengatur CLASSPATH di / etc / environment

  sudo gedit /etc/environment

3) tambahkan like berikut .. (JANGAN MENINGGALKAN SETIAP RUANG SAAT MENGETIK) (sesuaikan menurut versi java dan instalasi Anda) (jalur home ini untuk open 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

pisahkan direktori dengan ":"

rightkushagra
sumber
Mengapa semua orang menambahkan "{JAVA_HOME} / lib" ke classpath mereka? Itu tidak perlu, atau bahkan ide yang bagus. Dalam hal ini, menyetel env CLASSPATH juga merupakan ide yang buruk, kecuali jika ada dalam skrip shell, hanya untuk skrip itu, dalam hal ini, opsi baris perintah "-cp" ke java masih akan lebih disukai.
michael
0

terminal terbuka dan ketik

sudo nano ~ / .bashrc

tambahkan semua ekspor yang Anda butuhkan seperti ...

export JAVA_HOME = / usr / local / java / jdk1.6.0_06 (jalur Anda)

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

akhirnya restart terminal agar perubahan diterapkan

mateen
sumber