Jumat, Maret 08, 2019

Bagaimana Cara Menjalankan Class File pada Direktori yang Berbeda?

Pada arikel ini akan dipelajari cara menggunakan project utilities, classes, dan anggotanya. Sebelum mulainya pelajari beberapa keyword berikut terlebih dahulu.

Classpath
Classpath adalah lokasi dari JVM saat memulai eksekusi program. Sama hal nya dengan perilaku loading dinamis klasik, ketika progam Java dieksekusi JVM akan mencari dan melakukan loading class. Classpath memberi tahu JVM dimana lokasi file system untuk mendefinisikan file class. Variabel dan method yang dapat diakses dan tersedia di classpath disebut sebagai classpath variabel. secara otomatis JVM selalu mengakses classpath class ketika mengeksekusi program. JVM selalu menuju bagian dalam dari classpath untuk mencari classes atau src.

JVM mencari dan melakukan loading class dalam urutan berikut ini:
satu, bootstrap class: class yang fundamental bagi Java Platform (Membandingkan mana yang berfungsi lebih penting antara public class dari Java Class Library dan Private Class).
dua, extension class: package yang berada pada direktori extensi dari JRE atau JDK, jre/lib/ext/ user-defined packaged, dan libraries.

Menggunakan import keyword
Import keyword digunakan pada Java untuk me-ngimport class dari classpath project saat ini. Import class juga bisa dilakukan dari packcages yang berbeda tetapi dari classpath yang sama. Hal yang perlu diingat bahwa package dari class dimulai dari classpath. Jika program memiliki struktur direktori seperti berikut:

a > b > c > d > class A

dan classpath dimulai dari c, maka class program harus berada pada package d bukan pada a, b, c.

Menggunakan classpath -cp option
Import keyword juga bisa melakukan import class dari classpath saat ini, sedangkan import classpath yang berada di luar class tidak bisa digunakan. Misal, telah dibuat sebuah src dalam sebuah file Java yang menggunakan beberapa utility class, dimana file Java tersebut juga dibutuhkan pada pekerjaan project yang kedua. Maka pada situasi ini, import keyword tidak berfungsi karena project pertama berada pada classpath yang berbeda. Untuk menyelesaikan permasalahan tersebut bisa menggunakan solusi -cp command ketika melakukan kompilasi dan eksekusi program.

Lanjutkan dengan contoh berikut ini. Ciptakan struktur direktori seperti pada gambar 1.

menjalankan program Java dari dua sumber kode program yang berbdeda direktori penyimpanan pada bahsa pemrograman Java
Gambar 1 direktori src dan classes
sumber : geeksforgeeks.org

Dari gambar 1 sekarang dimiliki dua buah project Java yang mengandung src dan classes. Pada direktori src, terdapat .java file yang berisi kode program dan pada direktori classes terdapat .class file yang di-generate setelah proses kompilasi program.

Berikut langkah-langkah yang dilakukan untuk menjalankan class Java yang terdapat pada direktori yang berbeda.
step 1 (ciptakan utility class): ciptakan A.java pada direktori src beserta isi kode programnya.

step 2 (Kompilasi utility class): Buka terminal (cmd pada Windows) dimana lokasi proj1 berada dan eksekusi program dengan perintah berikut:

cp_tutorial/proj1>cd src
cp_tutorial/proj1/src>javac -d ../classes A.java

-d Option: digunakan untuk menyimpan output menuju direktori yang berbeda. Jika tidak menggunakan perintah ini (-d) maka class file akan diciptakan pada direktori src. Namun, ini merupakan hal yang baik karena bisa tetap menjaga kode program dan class file terpisah setelah perintah -d menyediakan lokasi dari direktori class file untuk disimpan.

catatan: pada tahap ini, jika masih ada hasil kompilasi program error maka segera diselesaikan terlebih dahulu.

step 3 (Perika apakah A.java telah berhasil dikompilasi): periksa pada direktori class proj1 apakah class file telah diciptakan atau belum. Biasanya proses tersebut telah diciptakan jika pada saat kompilasi program telah berjalan dengan sukses.

step 4 (Buat class main dan lakukan kompilasi): Selanjutnya pindah kebagian direktori proj2. Pada bagian ini juga terdapat dua direktori untuk alasan yang sama seperti sebelumnya. Ciptakan MainClass.java pada direktori src seperti kode program berikut dan lakukan kompilasi program setelahnya.

Seperti yang diperhatikan pada hasil sebelumnya, kompilasi memberikan error pada hasil akhir program karena simbol A tidak ditemukan pada project. Jika ingin menggunakan classes A dari proj1 maka dapat menggunakan perintah -cp option untuk memasukkan kode program proj1 seperti diperlihatkan pada step 5.

Step 5 (Kompilasi dengan perintah -cp option):

cp_tutorial/proj2>cd src
cp_tutorial/proj2/src>javac -d ../classes -cp 
../../proj1/classes MainClass.java

Sekarang kode program dapat dikompilasi dengan sukses dan MainClass.class dapat diciptakan didalam direktori classes yang terdapat pada classpath dan didalamnya terdapat path (jalur) yang diberikan beserta classpath saat ini, dan ketika JVM sudah menemukan simbol A di dalam class maka proses kompilasi berjalan sukses.

Step 6 (Eksekusi program): Coba lakukan eksekusi program.
Ikuti perintah (command) berikut untuk menjalankan program.

cp_tutorial/proj2/src>cd ../classes
cp_tutorial/proj2/classes>java MainClass
Exception in thread "main" java.lang.NoClassDefFoundError: A
        at MainClass.main(MainClass.java:4)
Caused by: java.lang.ClassNotFoundException: A
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 1 more

Setelah program dijalankan ternyata masih didapati pesan error, hal ini karena JVM memberitahukan A path hanya pada waktu kompilasi saja. Ketika MainClasss dieksekusi, class tersebut tidak mengetahui bahwa ada class A lain pada project lainnya.

Step 7 (Eksekusi program menggunakan -cp option): Siapkan kembali path dari class A.

cp_tutorial/proj2/classes>java -cp ../../proj1/classes; MainClass
In main class
Test() method of class A

Sekarang program telah berhasil dijalankan.

catatan: jangan lupa menambahkan simbol semicolon (;) pada bagian akhir dari path yang dibuat.

Bagaimana menjalankan program Java dengan Jar pada classpath?
Program juga bisa menggunakan jar file sebagai pengganti dari class file pada classpath yang berbeda. Tahapan proses yang dilakukan adalah sama dengan mengganti folder menggunakan jar dan class name menggunakan jar name. Ibarkatkan telah dimiliki sebuah direktori jar file lib, setelah itu lakukan kompilasi program.

cp_tutorial/proj2/src>javac -d ../classes -cp ../../proj1/lib MainClass.java

kemudian eksekusi program tersebut

cp_tutorial/proj2/classes>java -cp ../../proj1/lib; MainClass

Tidak ada komentar:

Posting Komentar

Respon komentar 7 x 24 jam, so please be patient :D

Footer Adsense