2012-08-22 35 views
46

Là một thực tập sinh, tôi sử dụng mã công ty trong các dự án của mình và họ thường gửi cho tôi một tệp jar để làm việc. Tôi thêm nó vào tòa nhà path trong Eclipse và thường tất cả đều tốt và dandy.Tập tin jar chứa chính xác những gì?

Tuy nhiên, tôi đã tò mò muốn biết, những gì mỗi lớp chứa và khi tôi cố gắng để mở một trong các lớp học trong tập tin jar, nó nói với tôi rằng tôi cần một tập tin nguồn.

Điều này có nghĩa là gì? Tôi đến từ một nền tảng C/C++ như vậy là jar tương tự như tệp đã biên soạn .o và tất cả những gì tôi có thể thấy là công cụ .h? Hoặc có mã thực sự trong tệp jar mà tôi đang sử dụng được mã hóa để tôi không đọc được không?

Cảm ơn tất cả các câu trả lời!

Edit:
Cảm ơn, guys, tôi biết đó là một loại giống như một kho lưu trữ nhưng tôi đã nhầm lẫn tại sao khi tôi đã cố gắng để mở .class tác phẩm, tôi nhận được một loạt các ký tự ngẫu nhiên. Đầu ra tương tự khi tôi cố gắng mở một tệp .o trong C vì vậy tôi chỉ muốn đảm bảo.
Cảm ơn!

+0

[Định dạng tệp JAR] (http://en.wikipedia.org/wiki/JAR_ (file_format)) – mellamokb

+0

http://en.wikipedia.org/wiki/JAR_ (file_format \) – danmcardle

+2

@Blue Moon: Điều thú vị là google dẫn tôi tới đây. : p – user1036719

Trả lời

51

Một tập tin JAR thực sự chỉ là một tập tin ZIP. Nó có thể chứa bất cứ thứ gì - thường nó chứa mã Java được biên dịch (* .class), nhưng đôi khi cũng có mã nguồn Java (* .java).

Tuy nhiên, Java có thể được giải mã - trong trường hợp nhà phát triển làm xáo trộn mã của mình, bạn sẽ không nhận được bất kỳ tên lớp/chức năng/tên biến hữu ích nào.

14

Cách tốt nhất để hiểu những gì các tập tin jar chứa là bằng cách thực hiện này:

Đến dòng lệnh và thực hiện jar tvf jarfilename.jar

42

Tuy nhiên, tôi tò mò muốn biết mỗi lớp chứa gì và khi tôi cố gắng mở một trong các lớp trong tệp jar, nó cho tôi biết rằng tôi cần tệp nguồn.

Tệp jar về cơ bản là tệp zip chứa tệp .class và các tài nguyên tiềm năng khác (và siêu dữ liệu về chính jar). Thật khó để so sánh C với Java thực sự, vì mã byte Java duy trì nhiều siêu dữ liệu hơn so với hầu hết các định dạng nhị phân - nhưng tệp lớp mã được biên dịch thay vì mã nguồn.

Nếu bạn mở tệp jar bằng tiện ích nén hoặc chạy jar xf foo.jar, bạn có thể trích xuất tệp từ đó và xem chúng. Lưu ý rằng bạn không cần cần tệp jar để chạy mã Java - trình nạp lớp có thể tải dữ liệu lớp trực tiếp từ hệ thống tệp hoặc từ URL cũng như từ tệp jar.

+0

Cảm ơn, tôi biết nó giống như một kho lưu trữ vì tôi có thể giải nén nó nhưng tôi đã nhầm lẫn tại sao không có tệp .class nào chứa văn bản có thể đọc được. Cảm ơn bạn đã giải thích, tôi đoán một .class giống như một tệp .o. – joshualan

1

Tệp .jar tương tự như tệp .exe. Về bản chất, chúng là cả hai tệp zip thực thi (các thuật toán zip khác nhau).

Trong tệp jar, bạn sẽ thấy các thư mục và tệp lớp. Mỗi tệp lớp tương tự như tệp .o của bạn và là tệp lưu trữ java được biên dịch.

Nếu bạn muốn xem mã trong tệp jar, tải xuống trình giải mã java (nằm ở đây: http://java.decompiler.free.fr/?q=jdgui) và trình trích xuất .jar (7zip hoạt động tốt).

9

Tệp jar là tệp zip với một số tệp bổ sung chứa siêu dữ liệu. (Mặc dù phần mở rộng .jar, nó là ở định dạng zip, và bất kỳ tiện ích mà đối phó với các tập tin .zip cũng có thể đối phó với các file .jar.)

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

file Jar có thể chứa bất kỳ loại file , nhưng chúng thường chứa các tệp lớp và hỗ trợ các tệp cấu hình (thuộc tính), đồ họa và các tệp dữ liệu khác mà ứng dụng cần.

Tệp lớp chứa mã Java đã biên dịch, được thực thi bởi Máy ảo Java.

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

+0

cộng 1 vì bạn liên kết với tiêu chuẩn –

3

tập tin JAR chứa biên soạn Java lớp nhị phân dưới dạng *.class mà có thể được chuyển đổi sang thể đọc được lớp .java bởi dịch ngược nó sử dụng một số decompiler mã nguồn mở. Bình cũng có một tùy chọn META-INF/MANIFEST.MF cho chúng ta biết cách sử dụng tệp jar - chỉ định các tệp jar khác để tải bằng bình.

2

JD-GUI là một công cụ rất tiện dụng để duyệt và dịch ngược lọ

0

Một file .jar chứa mã biên dịch (tập tin * .class) và các dữ liệu khác/tài nguyên liên quan đến mã đó. Nó cho phép bạn gộp nhiều tệp vào một tệp lưu trữ duy nhất. Nó cũng chứa siêu dữ liệu. Vì nó là một tệp nén, nó có khả năng nén dữ liệu mà bạn đưa vào nó.

Vài điều tôi thấy hữu ích.

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

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

Cuốn sách OSGi trong thực tế xác định các tập tin JAR như, "lọ là tập tin lưu trữ dựa trên định dạng file ZIP, phép nhiều tập tin được tổng hợp thành một file duy nhất. Điển hình Các tệp chứa trong tệp lưu trữ là một hỗn hợp các tệp lớp Java được biên dịch và các tệp tài nguyên như hình ảnh và tài liệu. một số tên và định dạng tệp tiêu chuẩn trong đó trực tiếp, hầu hết quan trọng trong số đó là tệp MANIFEST.MF. "

5

JAR là viết tắt của Java ARchive. Đó là một định dạng tệp dựa trên định dạng tệp ZIP phổ biến và được sử dụng để tổng hợp nhiều tệp thành một. Mặc dù JAR có thể được sử dụng như một công cụ lưu trữ chung, động lực chính cho sự phát triển của nó là các applet Java và các thành phần cần thiết của chúng (các tệp .class, hình ảnh và âm thanh) có thể được tải xuống một trình duyệt trong một giao dịch HTTP duy nhất. một kết nối mới cho mỗi phần. Điều này cải thiện đáng kể tốc độ mà một applet có thể được tải lên một trang web và bắt đầu hoạt động. Định dạng JAR cũng hỗ trợ nén, làm giảm kích thước của tệp và cải thiện thời gian tải xuống hơn nữa. Ngoài ra, các mục nhập riêng lẻ trong tệp JAR có thể được tác giả applet ký số hóa để xác thực nguồn gốc của chúng.

0

Theo tệp Jar hiểu biết của tôi giống như tệp Zip nhưng có tệp thi hành.

Nếu bạn không có tệp thi hành trong Jar thì nó sẽ giống như tệp Zip, tôi muốn nói lý do tại sao đến Jar.

Vì tệp Jar có tệp thi hành, chúng có thể được tải dễ dàng vào mã của bạn và dễ dàng chuyển sang người khác để sử dụng.

1

Chỉ cần kiểm tra xem tệp aopalliance.jar.java tệp thay vì .class tệp hay không. nếu có, chỉ cần giải nén tập tin jar, nhập nó vào eclipse & tạo một cái bình mặc dù nhật thực. Nó làm việc cho tôi.

0

Jar (Lưu trữ Java) chứa nhóm các tệp .class.

1.To tạo Jar File (Zip File)

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.To chiết xuất Jar File (Giải nén tập tin)

jar -xvf NameOfJarFile.jar 

3.To bảng hiển thị nội dung

jar -tvf NameOfJarFile.jar 
Các vấn đề liên quan