Saturday, 25 August 2007

JAR üzerine Temel Bilgiler - Cevaplanamamış Soru :)

Jar dosyalarını neden yaparız? Nedenlerinden biri, bir uygulamaya ait tüm class'ları ve kaynakları bir pakette toplamak içindir diye düşünüyorum. Bir diğer nedeni ise arşivlenmiş olan bir uygulamayı kolayca çalıştırabilmek içindir. Jarın faydalarına da bakalım. Jar haline getirilmiş paketimizi dijital olarak imzalayabiliriz. Uygulamanın boyutunu azaltır ve tek http transaction içinde bir applet'in ihtiyacı olan tüm kaynakların alınmasını sağlar.

Bazen kendimizi framework'lere, hazır teknolojilere o kadar kaptırıyoruz ki basit sorulara cevap bulamadığımız oluyor. Aslında zihnimizin bir yerinde bu basit sorulara cevabımız oluyor ama artık beynimizin çalışma yapısından mıdır bilemiyorum daha kompleks çalışmaya itiyor bizi. Basit düşün demişti bir abimiz. Cidden çok önemli bir özellik. Basit düşünmek...

Bir jar dosyasını nasıl çalıştırabileceğimiz sorusu da böyle bir soru. Bir jar'ı execute etmek için java'nın -jar komutunu kullanabiliriz.
java -jar jarIsmi.jar
şeklinde.

Ya da
jre -cp jarIsmi.jar MyClass
şeklinde jre'yi kullanarak da çalıştırabiliriz jar'ımızı. İlk kullanım için yapılması gereken bir ön işlem var. Jar içindeki uygulamanın main class'ını tanıtmamız gerekiyor. Bunun için de manifest dosyasına şunu ekliyoruz:
Main-class: MyClass

Main class için de bu class'ın bildiğimiz gibi public static void main(String[] args) metoduna sahip olması gerekmektedir. O zaman jar içindeki class'lardan main metoduna sahip farklı class'larımızı manifest dosyasını değiştirerek komut satırından çalıştırabiliriz. Manifest dosyasını komut satırından değiştirmek için de m opsiyonunu kullanabiliriz. m opsiyonunu kullanarak jar'ın manifest'i içine ek bilgi girebiliriz. Şöyle ki:

jar cmf manifest-addition jar-file input-file(s)

Fakat bunun daha kolay yolu yukarıda da belirttiğimiz jre komutunu kullanmak ve komut sonunda verdiğimiz class ismini değiştirmek.

Soruları biraz daha geliştirelim. Bu jar içindeki bir applet'i web tarayıcı'dan nasıl çalıştırırız? Buna cevabı sun developer network'ten alıyorum.

<applet code=MyClass.class
archive="jarIsmi.jar"
width=100 height=100>
</applet>


Peki ant'a alışmışız, o tamam ... Ama komut satırından ya da manuel olarak bir jar yapmak istersek nasıl yaparız? Basit kullanım şöyle:
jar cf myjarfile *.class
Opsiyonel olarak Manifest dosyasını da eklemek istiyorsak o zaman cf komutunun sonuna m opsiyonu geliyor.
jar cfm myJarFile myManifestFile *.class
Eğer komut olarak cmf kullanırsak manifest ismi jar isminden önce gelir:
jar cmf myManifestFile myJarFile *.class

Ant'ta basitçe şu satırları da yazalım da aradaki benzerlikler kendini göstersin:
<property name="war" value="myJar" />
<property name="dist" value="../baseDirectory" />
<jar jarfile="${war}.war" manifest="manifest.mf" basedir="${dist}"/>

Bu bilgileri yazmamın nedeni, bana sorulan bir soruya cevap veremeyişimdi. Demek ki kendime dert edinmişim :) O yüzden buraya yazıyorum, aklımın bir kenarında dursun diye. Umarım ilgili soruya da yeterli cevap vermiş olurum. :)

No comments: