Apa sebenarnya isi file jar?

88

Sebagai magang, saya menggunakan kode perusahaan dalam proyek saya dan mereka biasanya mengirimi saya jarfile untuk dikerjakan. Saya menambahkannya ke build pathin Eclipsedan biasanya semuanya baik-baik saja dan keren.

Namun, saya penasaran untuk mengetahui, apa isi setiap kelas dan ketika saya mencoba membuka salah satu kelas di jarfile tersebut, saya diberi tahu bahwa saya memerlukan file sumber.

Apa artinya ini? Saya berasal dari latar belakang C / C ++ jadi apakah jarmirip dengan .ofile yang sudah dikompilasi dan yang bisa saya lihat hanyalah .hbarangnya? Atau apakah ada kode sebenarnya dalam jarfile yang saya gunakan yang dienkripsi sehingga saya tidak dapat membacanya?

Terima kasih atas semua jawabannya!

Sunting:
Terima kasih, teman-teman, saya tahu itu semacam arsip tetapi saya bingung mengapa ketika saya mencoba membuka .classfile, saya mendapat banyak karakter acak. Outputnya mirip ketika saya mencoba membuka .ofile di C jadi saya hanya ingin memastikan.
Terima kasih!

joshualan
sumber
1
Format File JAR
mellamokb
5
@Blue Moon: Lucunya google membawa saya ke sini. : p
user1036719
@ user1036719 Meskipun ada baiknya Anda menemukan jawaban di sini, masih ada satu tautan lain yang muncul sebelum ini. Dan ini kami bukan pertanyaan pemrograman yang perlu didorong di SO. Saya tidak merendahkan atau menutup suara.
PP

Jawaban:

88

File JAR sebenarnya hanyalah file ZIP. Ini bisa berisi apa saja - biasanya berisi kode Java yang dikompilasi (* .class), tetapi terkadang juga kode sumber Java (* .java).

Namun, Java dapat didekompilasi - jika pengembang mengaburkan kodenya, Anda tidak akan mendapatkan nama kelas / fungsi / variabel yang berguna.

ThiefMaster
sumber
53

Namun, saya penasaran dengan isi setiap kelas dan ketika saya mencoba membuka salah satu kelas di file jar, saya diberi tahu bahwa saya memerlukan file sumber.

File jar pada dasarnya adalah file zip yang berisi file .class dan kemungkinan sumber daya lain (dan metadata tentang jar itu sendiri). Sangat sulit untuk membandingkan C dengan Java, karena kode byte Java menyimpan lebih banyak metadata daripada kebanyakan format biner - tetapi file kelas adalah kode yang dikompilasi, bukan kode sumber.

Jika Anda membuka file jar dengan utilitas zip atau menjalankannya, jar xf foo.jarAnda dapat mengekstrak file darinya, dan melihatnya. Perhatikan bahwa Anda tidak memerlukan file jar untuk menjalankan kode Java - classloader dapat memuat data kelas langsung dari sistem file, atau dari URL, serta dari file jar.

Jon Skeet
sumber
Terima kasih, saya tahu ini seperti arsip karena saya dapat mengekstraknya tetapi saya bingung mengapa tidak ada file .class yang berisi teks yang dapat dibaca. Terima kasih telah menjelaskan, saya kira .class adalah semacam file .o.
joshualan
19

Cara terbaik untuk memahami apa isi file jar adalah dengan menjalankan ini:

Pergi ke baris perintah dan jalankan jar tvf jarfilename.jar

Ajay George
sumber
13

Sebuah jarfile adalah file zip dengan beberapa file tambahan yang mengandung metadata. (Terlepas dari ekstensi .jar, ini dalam format zip, dan utilitas apa pun yang menangani file .zip juga dapat menangani file .jar.)

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

File jar dapat berisi semua jenis file, tetapi biasanya berisi file kelas dan file konfigurasi pendukung (properti), grafik, dan file data lain yang diperlukan oleh aplikasi.

File kelas berisi kode Java yang dikompilasi, yang dapat dieksekusi oleh Java Virtual Machine.

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

theglauber
sumber
1
ditambah 1 karena Anda menautkan ke standar
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
10

JAR adalah singkatan dari Java ARchive. Ini adalah format file berdasarkan format file ZIP yang populer dan digunakan untuk menggabungkan banyak file menjadi satu. Meskipun JAR dapat digunakan sebagai alat pengarsipan umum, motivasi utama untuk pengembangannya adalah agar applet Java dan komponen yang diperlukannya (file .class, gambar, dan suara) dapat diunduh ke browser dalam satu transaksi HTTP, daripada membuka koneksi baru untuk setiap bagian. Ini sangat meningkatkan kecepatan applet yang dapat dimuat ke halaman web dan mulai berfungsi. Format JAR juga mendukung kompresi, yang mengurangi ukuran file dan lebih meningkatkan waktu download. Selain itu, entri individu dalam file JAR dapat ditandatangani secara digital oleh pembuat applet untuk mengotentikasi asalnya.

oxy_js
sumber
5

File jar berisi kelas biner Java yang dikompilasi dalam bentuk *.classyang dapat diubah menjadi .javakelas yang dapat dibaca dengan mendekompilasinya menggunakan beberapa dekompiler open source. Jar juga memiliki pilihan META-INF/MANIFEST.MFyang memberitahu kita bagaimana menggunakan file jar - menentukan file jar lainnya untuk dimuat dengan jar.

Piyush Mattoo
sumber
3

Jar (Java Archive) berisi kumpulan file .class.

1.Untuk membuat File Jar (File Zip)

 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. Untuk mengekstrak File Jar (Unzip File)

    jar -xvf NameOfJarFile.jar

3. Untuk menampilkan daftar isi

    jar -tvf NameOfJarFile.jar
bishwas pokharel
sumber
2

File .jar mirip dengan file .exe. Intinya, keduanya adalah file zip yang dapat dieksekusi (algoritme zip berbeda).

Dalam file jar, Anda akan melihat folder dan file kelas. Setiap file kelas mirip dengan file .o Anda, dan merupakan arsip java yang dikompilasi.

Jika Anda ingin melihat kode dalam file jar, unduh java decompiler (terletak di sini: http://java.decompiler.free.fr/?q=jdgui ) dan ekstraktor .jar (7zip berfungsi dengan baik).

Tyzoid
sumber
1

JD-GUI adalah alat yang sangat berguna untuk menjelajahi dan mendekompilasi JAR

Anton Arhipov
sumber
1
Ini tidak menjawab pertanyaan itu.
Craig Fisher
1

File .jar berisi kode yang dikompilasi (file * .class) dan data / resource lain yang terkait dengan kode tersebut. Ini memungkinkan Anda untuk menggabungkan beberapa file menjadi satu file arsip. Ini juga berisi metadata. Karena ini adalah file zip, ia mampu mengompresi data yang Anda masukkan ke dalamnya.

Beberapa hal yang menurut saya berguna.

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

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

Buku OSGi dalam praktiknya mendefinisikan file JAR sebagai, "JAR adalah file arsip berdasarkan format file ZIP, yang memungkinkan banyak file untuk digabungkan menjadi satu file. Biasanya file yang terdapat dalam arsip adalah campuran dari file kelas dan resource Java yang dikompilasi file seperti gambar dan dokumen. Selain itu, spesifikasi menentukan lokasi standar dalam arsip JAR untuk metadata - folder META-INF - dan beberapa nama file standar dan format di dalamnya secara langsung, yang terpenting adalah file MANIFEST.MF. "

Wazza
sumber
1

Cukup periksa apakah aopalliance.jarfile tersebut memiliki .javafile, bukan .classfile. jika demikian, cukup ekstrak file jar, impor di eclipse & buat jar melalui eclipse. Itu berhasil untuk saya.

Ghanshyam
sumber
1

Saat belajar tentang JAR, saya menemukan utas ini, tetapi tidak bisa mendapatkan informasi yang cukup untuk orang-orang seperti saya, yang memiliki latar belakang .NET, jadi saya akan menambahkan beberapa poin yang dapat membantu orang-orang seperti saya dengan latar belakang .NET.

Pertama kita perlu mendefinisikan konsep yang mirip dengan JAR di .NET yang mana Assembly dan assembly memiliki banyak kesamaan dengan file Java JAR.

Jadi, rakitan adalah unit dasar dari pengemasan kode di lingkungan .NET. Assemblies berdiri sendiri dan biasanya berisi kode perantara dari kompilasi kelas, metadata tentang kelas, dan file lain yang diperlukan oleh kode paket untuk melakukan tugasnya. Karena rakitan adalah unit dasar dari pengemasan kode, beberapa tindakan yang terkait dengan interaksi dengan tipe harus dilakukan di tingkat rakitan. Misalnya , pemberian izin keamanan, penerapan kode, dan pembuatan versi dilakukan di tingkat perakitan.

File Java JAR melakukan tugas serupa di Java dengan sebagian besar perbedaan dalam implementasinya. Assemblies biasanya disimpan sebagai EXE atau DLLs sementara file JAR disimpan dalam format file ZIP .

Sumber Informasi -> 5- Sidang

Muhammad Waqas Dilawar
sumber