June 7, 2009

membuat file .exe dari aplikasi Java

Posted in PBO2 at 4:52 pm by pbo2poliban

Pernah dengar atau memiliki pertanyaan semacam ini?

“Bagaimana saya membuat file .EXE dari aplikasi Java?”, “Perlu bantuan merubah .jar ke .exe”, “Apakah mungkin membuat Windows executable menggunakan Java?” — pertanyaan semacam ini merupakan salah satu topik paling populer dalam forum Java. Jika anda menemukan topik semacam ini, anda mungkin akan memberikan reply dengan pernyataan sebagai berikut:

* “Tidak bisa”

* “Sebaiknya jangan, karena itu berarti menghapuskan tujuan java sebagai pembuat aplikasi yang cross platform”

* “Anda dapat melakukannya dengan software pihak ketiga X dan Y”

yang sebenarnya adalah terdapat dua pendekatan yang benar-benar berbeda untuk pembentukan file executable native dari aplikasi Java, bagi tujuan/masalah yang berbeda. Bahkan, pada kondisi tertentu masalah-masalah tersebut dapat diatasi tanpa harus membuat file .EXE. Jadi reply yang paling tepat untuk permasalahan di atas adalah dengan meminta informasi lebih tentang tujuan dari kebutuhan akan konversi ke file .EXE, dan jawaban yang biasanya muncul adalah:

Menyederhanakan Deployment Aplikasi Java

Java di-kompile menjadi bytecode yang bersifat (file .class), yang tidak didukung secara langsung oleh hardware PC. Jadi program Java perlu Java Runtime Environment (JRE) untuk bisa dijalankan, JRE ini yang akan menginterpretasikan instruksi dalam bytecode maupun meng-kompile-nya “on the fly” <<dikompile saat pertama kali dijalankan>>. Ini juga berarti penulis program harus dapat memastikan bahwa JRE dengan versi yang tepat telah ter-install di sistem end user.

Dalam kasus umum anda mungkin tidak berharap end-user anda perlu tahu apa itu JRE, bagaimana memeriksa versi-nya, dan bagaimana mendownload serta meng-install-nya. Ini benar untuk aplikasi konsumen seperti games atau multimedia. Dan mereka yang merasa sudah meng-install JRE mungkin tidak terlalu senang diharuskan menginstall JRE dengan versi berbeda, karena dapat mengacaukan aplikasi Java yang telah ter-install dalam sistem mereka.

Maka, bahkan jika anda dapat memastikan versi yang tepat untuk JRE telah ter-install pada sistem end user anda, command line yang dibutuhkan untuk meluncurkan aplikasi Java anda bisa menjadi cukup panjang:

java -Xmx200m -cp aplikasi.jar -Dbeberapa.property MyApp

Ya, anda dapat menuliskan baris di atas dalam file batch <<file ber-ekstensi .BAT>> dengan nama runme.bat, namun tentu lebih menyenangkan untuk memberikan program anda ke teman, guru, atau kolega, sebagai sebuah file yang dapat dijalankan cukup dengan meng-klik ganda file tersebut. Atau bahkan memungkinkannya untuk di-install dan di-uninstall dengan cara native tanpa mempengaruhi aplikasi lain.

Jadi tidak mengherankan bahwa motivasi utama untuk mencari cara merubah file aplikasi Java ini menjadi file berekstensi .EXE adalah untuk menjadikan deployment dan penggunaannya lebih sederhana dan lebih aman bagi pengguna awam, yakni pengguna Windows. Biasanya yang mengherankan newbies di Java adalah tidak adanya fungsionalitas untuk melakukan ini <<membuat file executable>> pada JDK.

Executable Jars

Anda dapat menjadikan aplikasi Java anda dijalankan dengan prosedur meng-klik-ganda file aplikasi anda dengan mengemasnya dalam file yang disebut executable jar. Anda melakuknnya dengan men-spesifikasikan kelas utama aplikasi anda, seluruh file .jar ekstra yang diperlukan untuk menjalankan aplikasi anda, dst dalam file manifest file milik file .jar yang akan anda buat.

    Main-Class: MyAppMain
    Class-Path: mylib.jar

Maka di sini anda menggunakan utility jar dari Java SDK untuk mengemas kelas dan kode sumber anda:

    jar cvfm MyApp.jar MyApp.mf *.class *.gif

Ini akan menghasilkan MyApp.jar. Sekarang, jika anda mengetik

    java -jar MyApp.jar

Java launcher akan membaca manifest dari MyApp.jar dan memanggil method main dari kelas MyAppMain. Kemudian, jika anda meng-klik ganda file jar anda pada sistem yang telah ter-install JRE di dalamnya, java launcher akan secara otomatis dipanggil.

Note: Sebagaimana pada J2SE 5.0, file .jar berkaitan dengan javaw launcher pada Windows, yang tidak akan membuka console ketika startup. Jika aplikasi anda memerlukan console, tulis file batch yang akan membuka concole menggunakan java launcher.

Jika aplikasi anda terdiri lebih dari satu file jar, terdapat open source tool yang disebut One-JAR tyang meng-klaim dapat secara benar mengemas ulang beberapa jar menjadi satu.

Masalah utama dengan .jar executable adalah kompatibilitas. JRE default dari sistem bisa jadi merupakan versi yang lebih lama daripada yang dibutuhkan oleh aplikasi kita, dan bisa jadi tidak ter-install Java Optional Packages (sebelumnya dikenal dengan Standard Extensions). Misalkan, jika aplikasi anda menggunakan paket java.nio yang dikenalkan dalam Java 2 versi 1.4, aplikasi kita tidak akan dapat berjalan pada JRE 1.3.x. Serupa dengan itu, jika aplikasi Java kita menggunakan JavaMail 1.3, dan JRE default hanya memiliki JavaMail 1.2 atau JavaMail sama sekali tidak ada, maka meng-klik ganda file .jar tidak akan berhasil menjalankan aplikasi anda.

Untungnya Sun telah menciptakan teknologi deplyment aplikasi Java yang menghilangkan masalah kompatibilitas inisejak JDK versi 1.4. Teknologi ini disebut:

Java Web Start

Java Web Start (JWS) dan protokol yang mendasarinya: Java Network Launch Protocol (JNLP) memungkinkan pengiriman aplikasi Java dari server Web standar. End user memulai instalasi aplikasi dengan meng-klik URL. Jika mesin Java Web Start tidak terdapat pada sistem, akan ditampilkan sebuah kotak dialog untuk men-download atau meng-install-nya. Begitu Java Web Start telah terinstall dalam mesin kita, meng-klik URL yang sama akan memulai prosedur download dan instalasi. Ini termasuk mekanisme pemilihan versi JRE yang sesuai untuk di-download dan paket pilihan diperlukan.

Jika seluruh proses ini sukses, aplikasi akan diluncurkan. Aplikasi kemudian akan di-cached ke sistem user sehingga jika lain waktu user meng-klik URL yang sama, mesin JWS akan meluncurkan salinan lokal aplikasi dalam cache jika sistem mendeteksi komputer dalam keadaan off-line atau aplikasi tidak di-update pada Web site.

Fitur penting lain dalam JWS adalah kemampuannya menjalankan aplikasi dalam sandbox – yakni kontainer yang telah diproteksi sedemikian rupa dari sistem berdasarkan arsitektur keamanan Java. Namun, tidak seperti applet, aplikasi anda tetap dapat memperoleh akses terhadap sistem lokal seperti filesystem, printer dan system clipboard menggunakan JNLP API <<bahkan jika ia datang dari lingkungan yang tidak dipercaya-yakni setelah memunculkan kotak dialog yang meminta konfirmasi user>>.

Java Web Start tersedia baik untuk Windows, Linux, dan Solaris, dan menjadi bagian dari MacOS X sejak v10.1. Ada juga implementasi JNLP protocol dari pihak ketiga, sebagian dari mereka juga mencakup tools yang akan membantu anda dalam pembuatan dan pemeliharaan paket JNLP.

Nah, itu tadi baru sisi positif dari JNLP, sekarang coba kita periksa kekurangannya. Pertama, untuk operasi yang tak nampak di layar, baik browser maupun Web server yang menjadi host dari aplikasi JNLP-enabled harus mendukung tipe application/x-java-jnlp-file MIME. Sebagian provider hosting tidak mendukung tipe ini. Kemudian, update otomatis paket dan JRE yang diperlukan memerlukan dukungan tambahan dari Web server, yang harus diimplementasikan menggunakan servlets, cgi-bin scripts, etc.

Pada sisi klien, browser utamanya harus di-konfigurasi untuk dapat mengenali tipe MIME selama instalasi mesin JWS. Namun pengguna browser yang kurang populer seperti Opera mungkin harus melakukan ini secara manual.

Sebelum J2SE 5.0, JWS hanya sedikit terintegrasi pada desktop, yang biasanya dapat ia lakukan adalah membuat icon pada desktop atau Menu Start . Pada Windows, aplikasi tidak akan muncul pada Add/Remove Programs, jadi end-user harus menjalankan Java Web Start application manager untuk menghapus aplikasi anda.

Selanjutnya, antar muka JWS yang muncul sebagai jendela jelek ini juga masih harus diperbaiki. Bahkan sampai pada pengguna J2SE 5.0, jendela buruk ini masih dikeluhkan.

Jika ditarik kesimpulan, JWS dapat menjadi pilihan dalam sebuah lingkungan yang terkendali, seperti corporate intranet, namun ia masih belum sesuai untuk pasar konsumen. Untuk pasar ini anda lebih baik menggunakan:

Custom Java Launchers And Wrappers

Ketika program Java di-install dengan metode yang telah didiskusikan di atas (file batch, executable jar, atau Java Web Start/JNLP), siste operasi menjalankan Java launcher dari JRE. JRE untuk versi Windows memiliki launchers yang terpisah untuk command-line dan aplikasi GUI, launcher untuk commandline disebut java.exe, sementara launcher untuk aplikasi GUI disebut javaw.exe .

Akibatnya, seluruh aplikasi Java yang dijalankan memiliki icon Taskbar/Alt-Tab yang sama dan muncul pada Windows Task Manager sebagai java.exe atau javaw.exe. Jika anda memiliki dua atau lebih aplikasi Java yang sedang berjalan, anda memiliki kepentingan untuk dapat membedakan beberapa Java launcher <<aplikasi>> itu dalam Task Manager.

Pada dasarnya, “para Java launcher” itu tidak lebih dari program nativ yang memuat Java Virtual Machine dari DLL/shared library dan meng”umpan”kan program anda pada JVM tersebut dengan menggunakan API invokasi <<kata serapan versi saya dari istilah “invocation”>>. Nah, Api yang kita pakai untuk meng”umpan”kan aplikasi kita ke JVM ini merupakan bagian dari Java Native Interface (JNI), jadi sifatnya terstandarisasi dan sangat sederhana. Ini menjadikan anda dapat menulis sendiri Java launcher anda dengan nama dan ikon yang unik. Yang perlu dilakukan adalah menemukan JRE yang sesuai pada sistem end-user anda <<kecuali jika anda mem-bundle JRE dengan aplikasi anda>>, memuat dan menginisialisasi JVM, dan menjalankan aplikasi anda di atas JVM ini.

Jika anda tidak memiliki tools yang tepat, skill, atau waktu untuk mengembangkan launcher standar untuk aplikasi Java anda, terdapat beberapa generator Java launcher dari pihak ketiga. Beberapa diantaranya menyediakan fitur tambahan seperti instant splashscreen, stdout dan stderr redirection, dsb.

Java wrapper pada dasarnya adalah Java launcher standar yang juga dapat melakukan self-extracting archive yang berisi seluruh kelas aplikasi, jar, dan file bantuan lainnya. Wrapper mengeluarkan seluruh file tersebut saat aplikasi dimulai dan menghapusnya begitu aplikasi dihentikan. Dengan cara ini alikasi anda berjalan sebagai aplikasi executable single.

Wrapper biasanya akan mencari JRE ketika dijalankan. Jika JRE tidak ada, atau versi-nya tidak sesuai dengan kompatibilitas aplikasi, beberapa wrapper dapat menginstall JRE (jika anda telah mencantumkan JRE ini ketika anda “membungkus” <<wrapping>> aplikasi anda) dan/atau men-download dan meng-install versi JRE yang dibutuhkan.

Wrapper yang paling canggih juga dapat men-setup keterkaitan file dan menciptakan shortcuts ketika dijalankan. Namun jika yang anda butuhkan adalah sesuatu yang lebihi kompleks, seperti dukungan untuk update otomatis, anda dapat mempertimbangkan menggunakan:

Java-Aware Setup Authoring Tools

Jika yang anda butuhkan adalah melakukan instalasi JRE <<sesuai yang dibutuhkan aplikasi>> sebagai bagian dari proses instalasi aplikasi, dan menciptakan shortcut yang menjalankan aplikasi anda di atas JRE itu, anda dapat menggunakan generator setup. Berikut adalah keuntungan jika anda menggunakan Java-aware:

  • Deteksi JRE dan download saat proses instalasi

  • Generasi native launchers

  • User-editable file parameter JVM

  • Redirection of stderr dan stdout untuk menyimpan log dan stack trace eksepsi.

  • Registrasi aplikasi Java sebagai servis Windows dan daemon Unix

kategori ini yang paling beragam dalam hal harga dan fungsionalitas. Perbedaannya dijelaskan di bawah ini melalui contoh.

Windows-centric tool, seperti Advanced Installer for Java memungkinkan anda membangun paketMSI (Windows Installer).

Multi-platform tools dapat membangkitkan native installers dari multiple platforms – Windows, Linux, Mac OS X.

Juga terdapat tool Java-based setup authoring yang memungkinkan anda melakukan cross-platform installations. Instalasi tersebut pada dasarnya menggunakan executable jars dengan pemilihan platform yang spesifik dilakukan saat aplikasi dijalankan.. InstallAnywhere mungkin merupakan tool yang paling dikenal untuk tipe ini, namun jika harganya di atas budget, anda dapat mempertimbangkan penggunaan tools sejenis yang lebih murah yakni JExpress atau tool yang sifatnya opensource IzPack.

Akhirnya, ada satu tool yang memiliki fungsionalitas terlengkap: – InstallShield, yang dapat menciptakan Windows desktop (MSI) dan instalasi cross-platform.

Namun untuk instalasi langsung, InstallShield terlalu MAHAL. Mungkin karena baik InstallShield maupun InstallAnywhere lebih ditujukan ke pengembang aplikasi enterprise sehingga harga yang ditetapkan juga sesuai untuk budget perusahaan.

Keseluruhan solusi yang dipaparkan tidak merubah prinsip fundamental yang telah disampaikan pada bagian awal artikel ini. Baik dengan membuat file executable jar, atau membuat installer yang canggih, program Java anda akan di-deploy sebagai platform-independent bytecode. Pada awal-awal keberadaan Java, satu-satunya cara untuk mengeksekusi Java pada PC yang sama adalah dengan menginterpretasikan bytecode-nya. Saat ini, setiap turunan implementasi dari J2SE akan memiliki kompiler Just-In-Time (JIT) yang akan meng-kompile method yang sering digunakan ke kode native-nya.

Resource:

http://www.excelsior-usa.com/articles/java-to-exe.html

About these ads
Follow

Get every new post delivered to your Inbox.

%d bloggers like this: