Bir jar dosyası tam olarak ne içerir?


88

Stajyer olarak projelerimde şirket kodu kullanıyorum ve genellikle bana jarbirlikte çalışmam için bir dosya gönderiyorlar . Ben yapı eklemek pathiçinde Eclipseve genellikle tüm iyi, güzel.

Bununla birlikte, her sınıfın ne içerdiğini merak ettim ve jardosyadaki sınıflardan birini açmaya çalıştığımda , bana bir kaynak dosyaya ihtiyacım olduğunu söylüyor.

Ne anlama geliyor? C / C ++ arka planından geliyorum, bu yüzden jarönceden derlenmiş bir .odosyaya benzer ve tek görebildiğim.h şey şeyler mi? Yoksa kullandığım jardosyada şifrelenmiş gerçek kod var, bu yüzden okuyamıyorum?

Tüm cevaplar için teşekkürler!

Düzenleme:
Teşekkürler çocuklar, bir çeşit arşiv olduğunu biliyordum ama .classdosyaları açmaya çalıştığımda neden bir sürü rastgele karakter aldım diye kafam karıştı . .oC'de bir dosya açmaya çalıştığımda çıktı benzerdi, bu yüzden emin olmak istedim.
Teşekkürler!




5
@Blue Moon: Komik olan, google beni buraya yönlendiriyor. : p
user1036719

@ user1036719 Burada cevabı bulmuş olman iyi olsa da bundan önce gelen bir başka bağlantı daha var . Ve bu biz, SO konusunda teşvik edilmesi gereken bir programlama sorusu değiliz. Yine de olumsuz oy vermedim veya oylamayı kapatmadım.
PP

Yanıtlar:


88

Bir JAR dosyası aslında sadece bir ZIP dosyasıdır. Her şeyi içerebilir - genellikle derlenmiş Java kodunu (* .class), ancak bazen Java kaynak kodunu da (* .java) içerir.

Bununla birlikte, Java derlenmiş olabilir - geliştiricinin kodunu karıştırması durumunda, yine de herhangi bir kullanışlı sınıf / işlev / değişken adı alamazsınız.


53

Ancak, her bir sınıfın neleri içerdiğini merak ettim ve jar dosyasındaki sınıflardan birini açmaya çalıştığımda, bana bir kaynak dosyaya ihtiyacım olduğunu söylüyor.

Bir jar dosyası temelde .class dosyalarını ve potansiyel olarak diğer kaynakları (ve jar'in kendisi hakkındaki meta verileri) içeren bir zip dosyasıdır. Java bayt kodu, çoğu ikili formattan çok daha fazla meta veri koruduğundan, C ile Java'yı karşılaştırmak gerçekten zordur - ancak sınıf dosyası , kaynak kodu yerine derlenmiş koddur.

Jar dosyasını bir zip yardımcı programıyla jar xf foo.jaraçarsanız veya çalıştırırsanız , dosyaları buradan çıkarabilir ve onlara bir göz atabilirsiniz. Java kodunu çalıştırmak için bir jar dosyasına ihtiyacınız olmadığını unutmayın - sınıf yükleyiciler, sınıf verilerini doğrudan dosya sisteminden veya URL'lerden ve jar dosyalarından yükleyebilir.


Teşekkürler, sıkıştırmayı açabildiğim için bir tür arşiv gibi olduğunu biliyordum ama .class dosyalarının hiçbirinin neden okunabilir metin içermediği konusunda kafam karışmıştı. Açıkladığınız için teşekkürler, sanırım .class bir tür .o dosyası gibi.
joshualan

19

Jar dosyasının ne içerdiğini anlamanın en iyi yolu şunu çalıştırmaktır:

Komut satırına gidin ve çalıştırın jar tvf jarfilename.jar


13

Bir jardosya meta verileri içeren bazı ek dosyaları ile bir zip dosyası. (.Jar uzantısına rağmen, zip biçimindedir ve .zip dosyalarıyla ilgilenen tüm yardımcı programlar, .jar dosyalarıyla da ilgilenebilir.)

http://docs.oracle.com/javase/8/docs/technotes/guides/jar/index.html

Jar dosyaları her tür dosyayı içerebilir, ancak genellikle sınıf dosyalarını ve destekleyici yapılandırma dosyalarını (özellikler), grafikleri ve uygulama tarafından ihtiyaç duyulan diğer veri dosyalarını içerir.

Sınıf dosyaları, Java Sanal Makinesi tarafından yürütülebilen derlenmiş Java kodunu içerir.

http://en.wikipedia.org/wiki/Java_class_file


1
artı 1 çünkü standarda bağlantı
veriyorsunuz

10

JAR, Java ARchive'ın kısaltmasıdır. Popüler ZIP dosya biçimine dayalı bir dosya biçimidir ve birçok dosyayı tek bir dosyada toplamak için kullanılır. JAR genel bir arşivleme aracı olarak kullanılabilse de, geliştirilmesindeki birincil motivasyon, Java uygulamalarının ve gerekli bileşenlerinin (.class dosyaları, görüntüler ve sesler) açmak yerine tek bir HTTP işleminde bir tarayıcıya indirilebilmesiydi. her parça için yeni bir bağlantı. Bu, bir uygulamanın bir web sayfasına yüklenebilme ve çalışmaya başlama hızını büyük ölçüde artırır. JAR formatı ayrıca dosyanın boyutunu küçülten ve indirme süresini daha da iyileştiren sıkıştırmayı destekler. Ek olarak, bir JAR dosyasındaki bireysel girişler, kaynaklarının doğrulanması için uygulama yazarı tarafından dijital olarak imzalanabilir.


5

Jar dosyası, bazı açık kaynak kod çözücüler kullanılarak derlenerek *.classokunabilir .javasınıfa dönüştürülebilen biçimindeki derlenmiş Java ikili sınıflarını içerir . Kavanoza ayrıca META-INF/MANIFEST.MFjar dosyasının nasıl kullanılacağını söyleyen isteğe bağlı bir de vardır - kavanozla yüklenmek için diğer jar dosyalarını belirtir.


3

Jar (Java Arşivi), bir grup .class dosyası içerir.

1. Jar Dosyası (Zip Dosyası) oluşturmak için

 if one .class (say, Demo.class) then use command jar -cvf NameOfJarFile.jar Demo.class (usually it’s not feasible for only one .class file)

 if more than one .class (say, Demo.class , DemoOne.class) then use command jar -cvf NameOfJarFile.jar Demo.class DemoOne.class

 if all .class is to be group (say, Demo.class , DemoOne.class etc) then use command jar -cvf NameOfJarFile.jar *.class

2. Jar Dosyasını çıkarmak için (Dosyayı Aç)

    jar -xvf NameOfJarFile.jar

3. İçindekiler tablosunu görüntülemek için

    jar -tvf NameOfJarFile.jar

2

Bir .jar dosyası bir .exe dosyasına benzer. Temelde, her ikisi de yürütülebilir zip dosyalarıdır (farklı zip algoritmaları).

Bir jar dosyasında, klasörleri ve sınıf dosyalarını göreceksiniz. Her sınıf dosyası .o dosyanıza benzer ve derlenmiş bir java arşividir.

Kodu bir jar dosyasında görmek istiyorsanız, bir java decompiler (burada bulunur: http://java.decompiler.free.fr/?q=jdgui ) ve bir .jar çıkarıcı (7zip iyi çalışıyor) indirin.



1

Bir .jar dosyası, derlenmiş kodu (* .class dosyaları) ve bu kodla ilgili diğer verileri / kaynakları içerir. Birden çok dosyayı tek bir arşiv dosyasında toplamanıza olanak tanır. Ayrıca meta verileri de içerir. Bir zip dosyası olduğundan, içine koyduğunuz verileri sıkıştırabilir.

Yararlı bulduğum birkaç şey.

http://www.skylit.com/javamethods/faqs/createjar.html

http://docs.oracle.com/javase/tutorial/deployment/jar/basicsindex.html

OSGi kitabı pratikte JAR dosyalarını şu şekilde tanımlar: "JAR'lar, birçok dosyanın tek bir dosyada toplanmasına izin veren ZIP dosya biçimine dayalı arşiv dosyalarıdır. Genellikle arşivde bulunan dosyalar, derlenmiş Java sınıfı dosyaları ve kaynakların bir karışımıdır. Ayrıca belirtim, meta veriler için bir JAR arşivi içinde standart bir konum - META-INF klasörü - ve bunun içindeki birkaç standart dosya adı ve biçimi tanımlar; bunların en önemlisi MANIFEST.MF dosyasıdır. "


1

aopalliance.jarDosyada .javadosya yerine dosya olup olmadığını kontrol edin .class. eğer öyleyse, sadece jar dosyasını çıkarın, onu tutulmaya aktarın ve tutulma sırasında bir kavanoz oluşturun. Benim için çalıştı.


1

JAR'ı öğrenirken, bu iş parçacığına rastladım, ancak benim gibi .NET geçmişi olan insanlar için yeterli bilgi alamadım, bu yüzden benim gibi kişilere .NET arka planı konusunda yardımcı olabilecek birkaç nokta ekleyeceğim.

Öncelikle .NET'te JAR'a benzer bir kavram tanımlamamız gerekir; bu, Assembly ve assembly paylaşımları Java JAR dosyalarıyla çok ortaktır.

Dolayısıyla, bir derleme .NET ortamında kod paketlemenin temel birimidir. Derlemeler bağımsızdır ve tipik olarak derleme sınıflarından ara kodu, sınıflar hakkındaki meta verileri ve paketlenmiş kodun görevini yerine getirmek için ihtiyaç duyduğu diğer dosyaları içerir. Derlemeler, kod paketlemenin temel birimi olduğundan, türlerle etkileşimle ilgili çeşitli eylemlerin montaj düzeyinde gerçekleştirilmesi gerekir. Örneğin , güvenlik izinlerinin verilmesi, kod dağıtımı ve sürüm oluşturma, derleme düzeyinde yapılır.

Java JAR dosyaları, Java'da benzer bir görevi gerçekleştirir ve çoğu farklılık uygulamada olur. Derlemeler genellikle EXE veya DLL olarak saklanırken, JAR dosyaları ZIP dosya biçiminde saklanır .

Bilgi Kaynağı -> 5- Meclisler

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.