Yazan : Şadi Evren ŞEKER
JAVA’nın standart kurulum paketi içerisinde yer alan jar uygulamasının amacı birden fazla sınıfı tek bir paket ve dolayısıyla dosya içerisinde toplamasıdır.
JAR dosyalarını sıkıştırma olarak düşünmek yerine bir arşivleme olarak düşünmek gerkir. Buradaki amaç tek bir dosyada bütün sınıfların (Class) toparlanmasıdır.
Bir jar dosyasını oluşturmak için :
jar cvf dosya.jar dosyalar
komutunda dosya.jar yerine oluşacak olan dosyamızın ismini, dosyalar yerine de hangi dosyaların arşivleneceğini parametre olarak vermek gerekir (örneğin *.class veya bir dizin ismi gibi)
buradaki c-create, v-verify, f-file anlamdındadır (yani jar oluşturuyoruz, oluştururken sınıyoruz (verify) ve dosya ismini (file) parametre veriyoruz anlamında)
Bir jar dosyasını çalıştırılabilir (executable) hale getirmek için jar dosyasının içerisine manifetst.mf ismi verilen bir dosya koymak ve bu dosyanın içerisine ilk çalıştırılacak olan sınıfın ismini vermek gerekir.
Bu işlem için aşağıdakine benzer bir dosya oluşturulur:
Manifest-Version: 1.0 Main-Class: shedai.Sadi Created-By: 1.3.1_01 (Sun Microsystems Inc.)
Yukarıdaki dosya içeriğinde manifest sürümü 1.0 olduğu ve ilk çalıştırılacak sınıfın shedai paketi içerisindeki Sadi isimli class olduğu belirtilmektedir. Son satır olan created-by satırı gerekli olmamakla birlikte java’nın hangi sürümü için oluşturulduğu bilgisini tutar. Bu bilgilendirme amaçlı satır kullanıcının java versiyonunu kontrol etmesini sağlar.
Bu dosyayı jar paketimize eklemek için aşağıdaki komut çalıştırılabilir:
jar cmf META-INF/Manifest.mf sadi.jar *
yukarıdaki satırın anlamı META-INF dizini altında bulunan Manifest.mf dosyasını (ki bu yukarıda içeriği verilen dosyadır) bir meta file olarak içer (yani çift tıklandığında yapılacak olan işlemler gibi bilgileri bu dosyada bulundur). Oluşan dosyanınismi sadi.jar olsun ve bütün dosyaları (*) bu jar’ın içerisine koy.
JAR dosyasını yukarıdaki şekilde oluşturduktan sonra çift tıklayarak dosyayı açabiliriz.
JAR dosyasını açmak için aşağıdaki komut kullanılabilir:
jar xvf dosya.jar
yukarıdaki komutun anlamı dosyaları çıkarmak ( eXtract) ve çıkarırken doğrulamak (Verify) anlamındadır.
merabalar hocam. ben netbeansde bir proje yapıyorum. projeyı baska bilgisayarda çalıştırdıgımda could not find main class.program will exit hatasını verıyor. aslında basit bi pencereye yazı yazdırdıgımda bu çalışıyo. ama ben jari bilgisayara kopyalayıp ordan da regedite atmak istedim.bunun için jregistrykey ve jregıstryeky.dll dosyasıda gerekıyodu bunları da prograama ekledım. ama dediğim gibi benım bılgısayarımda çalışıyo. ama baska bilgiasyarda çalışmiyor acaba bundan mı kaynalanıyor. ne yapabılırm. teşekkürler şimdiden.
Probleminiz kısaca ana sınıf tanımınız (mainclass) ile ilgili. Akla hemen gelen bir iki ihtimal şu şekildedir:
1. projenizde main dosyası içeren bir class yoktur. Şayet bir bilgisayarda çalışıyorsa hata bu olamaz.
2. Manifest dosyanızda Main-Class kayıdı yoktur. Örneğin yukarıdaki yazıda, shedai.Sadi olarak mainclass satırı girilmiş. Bu şekilde doğru package ismi altında (ve dolayısıyla doğru dizin altında) bu sınıfın (class) bulunduğundan emin olunuz.
3. Package ismi yanlıştır. Mainc-Class satırında verdiğiniz paket ismi ile aynı package satırının sınıfın kodunda bulunduğunu kontrol edin. Örneğin yukarıdaki satırda shedai.Sadi olarak geçtiğine göre Sadi sınıfının (class) kodunda, package shedai; yazıyor olmalı.
4. Dizin yapısını kontrol edin. Örneğin yukarıda shedai package’i var dolayısıyla projemin shedai dizini içermesi ve Sadi sınıfının bu dizin altında olması gerekir.
Bunun dışında bir sebep aklıma gelmiyor. Bunun dışında sınıf yolu (classpath) ile ilgili hatalar olabilir bunu anlamak için aşağıdaki şekilde konsoldan komut verin:
java -jar jarDosyasi.jar
Bu şekilde çalışıp da çift tıklayınca çalışmıyorsa o zaman JRE kurulumunda veya sınıf yollarında (classpath) hata var demektir gözden geçiririsiniz.
Başarılar
Merhaba hocam,
Ben kendi source kodumda, jar dosyasi altindaki classlari kullanmak istiyorum. Kullanacagim jar dosyasinda classlar altinda. Kullanmak istedigim classlari, source koduma hangi komut ile import edebilirim diye sorucaktim..
Simdiden tesekkur ederim..
s.a. iyi çalışmalar
ben jar dosyasını yapıp başka bilgisayarda çalıştırıyorum
fakat ms access veri tabanını tekrardan o bilgisayarda tanıtmam gerekiyor
fakat ben böyle birşey istemiyorum , yardım etmeniz mümkün mü acaba