Classpath pada bahasa pemrograman Java d5asd4a3
Classpath adalah cara java untuk menemukan di mana fle jar yang berisi library class yang digunakan dalam aplikasi. Kalau class yang digunakan tidak ditemukan dalam classpath, maka java akan mengeluarkan ClassNotFoundException. Kesalahan ini sering kali terjadi dan kita bisa langsung menyimpulkan bahwa class yang diperlukan tidak berada dalam classpath. Newbie sering kebingungan dengan error ini, maka saya merasa perlu untuk menerangkan konsep classpath dengan sedikit panjang lebar agar tidak terjadi kebingungan. Newbie yang belajar membuat aplikasi dari awal menggunakan IDE seperti NetBeans sering kebingungan ketika akan menginstall aplikasi, biasanya pertanyaan yang muncul adalah bagaimana membuat versi exe dari aplikasi java yang sudah dibuat. Saya bisa menjamin bahwa membuat exe dari program java yang sudah dibuat adalah tindakan sia sia, pertama karena malah akan menghilangkan feature utama java : run anywhere, ingat exe tidak bisa jalan di OS selain windows. Kedua karena convert java ke exe tidak gampang, perlu tools yang mahal harganya dan tidak ada jaminan bahwa hasil convert ke exe akan bisa jalan mulus seperti aslinya. Nah kalau tidak diconvert ke dalam exe bagaimana cara membuat launcher agar user tinggal klik dua kali dan aplikasi jalan? Jawabanya adalah dengan membuat fle bat di windows atau fle sh di selain windows. Di dalam fle bat / sh tersebut terdapat command line untuk menjalankan aplikasinya. Untuk membuatnya diperlukan sedikit pengetahuan tentang classpath ini.
Di bagian sebelumnya kita sudah belajar membuat sebuah fle jar yang berisi dua buah class :
Person dan PersonDao, nah kita sekarang akan membuat sebuah class lagi yang akan mengimport class Person dan mempunyai main method agar bisa dijalankan. Namakan saja classnya adalah ClasspathExercise, kemudian simpan class ini di folder yang berbeda dengan folder sebelumnya.
Misalnya folder sebelumnya ada di c:\sample-code, buat lagi sebuah folder kosong di c:\samplecode-classpath.
import
com.googlecode.projecttemplate.pos.model.Person;
public
class ClasspathExercise{
public void main(String[] args){
Person p = new Person();
p.setName("ini nama person");
System.out.println(p.getName());
}
}
Compile class di atas menggunakan javac
$ javac ClasspathExercise.java
kalau class di atas dijalankan seperti di bawah ini tanpa classpath maka akan keluar
ClassNotFoundException :
$ java ClasspathExercise
Exception in thread "main" java.lang.NoClassDefFoundError:
com/googlecode/projecttemplate/pos/model/Person
at ClasspathExercise.main(ClasspathExercise.java:4)
Caused by: java.lang.ClassNotFoundException:
com.googlecode.projecttemplate.pos.model.Person
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
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)
... 1 more
Classpath seperti yang sudah kita bahas di atas, digunakan untuk memberitahu java di mana bisa menemukan class-class yang dibutuhkan. Nah kalau cara menjalankan kodenya diganti dengan seperti di bawah ini :
$ java -cp c:\sample-code\pos.jar;. ClasspathExercise
ini nama person
$
Perhatikan command line di atas, terdapat argumen -cp yang menandakan bahwa kita akan mendefnisikan daftar classpath. File jar dan folder bisa dimasukkan sebagai daftar classpath, seperti contoh di atas kita mendaftarkan fle jar c:\sample-code\pos.jar dan folder yang sedang aktif, diwakili dengan tanda titik (.). Kalau anda bekerja di linux / unix terdapat perbedaan di tanda pemisah antar classpath, kalau windows menggunakan titik koma(;), OS selainya menggunakan titik dua(:) seperti di bawah ini
$ java -cp /Users/ifnu/sample-code/pos.jar:. ClasspathExercise
ini nama person
$
Kita juga bisa menggunakan relative path supaya tidak terjadi error kalau flenya dipindahpindah ke folder lain
:
$
java -cp ../sample-code/pos.jar:. ClasspathExercise
ini
nama person
$
Nah kembali lagi ke masalah fle bat / sh yang sudah kita bahas sebelumnya. Kita bisa meletakkan perintah di atas ke dalam fle ini dan mengeksekusi kedua fle tersebut layaknya executable fle.
Perintah di atas bisa sedikit diubah menjadi seperti di
bawah ini :
$ java -cp ../sample-code/*.jar:. ClasspathExercise
ini nama person
$
No comments:
Post a Comment