Wednesday, January 30, 2019

Cara Mengetahui Versi Compiler Aplikasi Berbasis Java

Java
Kedengarannya aneh. Tapi nyatanya menjadi diperlukan saat kita sedang dalam proses pengembangan aplikasi atau sebuah layanan. Karena bisa jadi ada beberapa fitur pada kompiler java yang mungkin tidak cocok antara versi satu dengan versi lainnya. 

Jadi ceritanya saya mau rebuild marmotta. Sebuah service triple store yang berbasis java, dari source codenya. tapi selama seharian saya upyek, build selalu berakhir gagal. Waktu itu CEO berhasil mengcompilenya, namun masih ada beberapa properties yang perlu ditambahkan karena ontology yang akan kami gunakan bukan ontology biasa melainkan ontology yang memiliki ekstensi geosparql.

8 Jam sudah saya modal madul nambah dan nyari-nyari sumber masalah dan dependency. Ditambah lagi saya kurang begitu suka sama si java. Maklum dulu mau ngoding java malas karena java tergolong berat dan resource saat saya masi di kampus saat itu masih terbatas. Untuk error nya sendiri. kurang lebihnya sebagai berikut :

Refer to the generated Javadoc files in '/src/platform/marmotta-ldpath/target/classes/web/doc/rest' dir.

org.apache.maven.reporting.MavenReportException:
Exit code: 1 - javadoc: error - In doclet class com.lunatech.doclets.jax.jaxrs.JAXRSDoclet,  method start has thrown an exception java.lang.reflect.InvocationTargetException
java.lang.NoSuchMethodError: com.sun.tools.doclets.formats.html.HtmlDocletWriter.(Lcom/sun/tools/doclets/formats/html/ConfigurationImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 at com.lunatech.doclets.jax.jaxrs.writers.JAXRSHtmlDocletWriter.(JAXRSHtmlDocletWriter.java:25)
 at com.lunatech.doclets.jax.jaxrs.writers.ResourceWriter.getWriter(ResourceWriter.java:45)
 at com.lunatech.doclets.jax.jaxrs.writers.ResourceWriter.(ResourceWriter.java:39)
 at com.lunatech.doclets.jax.jaxrs.model.Resource.write(Resource.java:162)
 at com.lunatech.doclets.jax.jaxrs.JAXRSDoclet.start(JAXRSDoclet.java:118)
 at com.lunatech.doclets.jax.jaxrs.JAXRSDoclet.start(JAXRSDoclet.java:90)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at com.sun.tools.javadoc.DocletInvoker.invoke(DocletInvoker.java:310)
 at com.sun.tools.javadoc.DocletInvoker.start(DocletInvoker.java:189)
 at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:366)
 at com.sun.tools.javadoc.Start.begin(Start.java:219)
 at com.sun.tools.javadoc.Start.begin(Start.java:205)
 at com.sun.tools.javadoc.Main.execute(Main.java:64)
 at com.sun.tools.javadoc.Main.main(Main.java:54)
Dan ternyata memang dependency yang digunakan memang ada yang bermasalah. Menurut forum dan issue di github, problemnya adalah kompatibilitas. bisa di cek disini, disini dan disini.

Saya mencoba mencari cara untuk menggali compiler versi berapa yang digunakan saat mengompile aplikasi java tersebut. Dan ternyata, ada. Waw, keren. :D

Jadi sederhananya, kita perlu mencari salah satu file library yang ber-ekstensi .jar pada aplikasi tersebut. Dan setelah saya cari-cari, ternyata library ada di folder $CATALINA_HOME/webapps/marmotta/WEB-INF/lib. Bisa di cek dengan perintah :
ls $CATALINA_HOME/webapps/marmotta/WEB-INF/lib
Nah, apabila file nya berbentuk .jar, maka kita perlu mengekstrak terlebih dahulu file tersebut. Kita bisa mengekstraknya dengan tool unzip. Jika aplikasi unzip belum terinstall bisa di install dengan perintah
sudo apt-get install unzip
Kemudian untuk mengkstrak file jar tadi, gunakan perintah
unzip marmotta-core-3.4.0-SNAPSHOT.jar
Saat proses ekstrak, kita akan melihat kumpulan file yang terkompresi kedalam file .jar tadi.
Proses Ekstraksi

Diantara daftar file-file tersebut ada file .class. Nah, bahan yang kita perlukan sudah ada. Sebagai contoh  saya akan menggunakan file SesameService.class yang berada pada direktori org/apache/marmotta/platform/core/api/triplestore/

sehingga perintah yang kita gunakan adalah
javap -verbose org/apache/marmotta/platform/core/api/triplestore/SesameService.class| grep -i major
Output yang dihasilkan kurang lebihnya akan seperti gambar berikut:

Kode Versi Compiler yang Digunakan


Disitu tertera major version 51. Angka tersebut memang bukan versi kompiler java nya. Namun angka tersebut sudah dapat memeberi informasi kompiler versi berapa yang digunakan saat mengompile aplikasi marmotta. Berikut adalah tabel major version dan versi platform kompiler java.

[major] [minor] [Versi Platform Java]
 45       3           1.0
 45       3           1.1
 46       0           1.2
 47       0           1.3
 48       0           1.4
 49       0           1.5
 50       0           1.6
 51       0           1.7
 52       0           1.8
Untuk versi-versi java selanjutnya mungkin mengikuti penambahan angka saja. jadi misal java 1.9 maka major version nya adalah 53.

Semoga bermanfaat.

Referensi :

No comments:

Post a Comment