Chính xác thì tệp jar chứa những gì?


87

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 jarhồ sơ để làm việc. Tôi thêm nó vào xây dựng pathtrong Eclipsevà thường là tất cả tiền phạt và dandy.

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

Điều đó có nghĩa là gì? Tôi đến từ nền tảng C / C ++, vì vậy nó jartương tự như một .otệp đã được biên dịch và tất cả những gì tôi có thể thấy là những .hthứ? Hay có mã thực tế trong jartệp mà tôi đang sử dụng được mã hóa nên tôi không thể đọc được?

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

Chỉnh sửa:
Cảm ơn, các bạn, tôi biết nó giống như một kho lưu trữ nhưng tôi bối rối không hiểu tại sao khi tôi cố gắng mở các .classtệp, 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 .otệp bằng C nên tôi chỉ muốn đảm bảo.
Cảm ơn!




5
@Blue Moon: Điều buồn cười là google dẫn tôi đến đây. : p
user1036719

@ user1036719 Mặc dù thật tốt khi bạn tìm thấy câu trả lời ở đây, nhưng vẫn còn một liên kết khác nằm trước điều này. Và chúng tôi đây không thực sự là một câu hỏi lập trình cần được khuyến khích trên SO. Mặc dù vậy, tôi đã không phản đối hoặc đóng phiếu bầu.
PP

Câu trả lời:


88

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

Tuy nhiên, Java có thể được dịch ngược - 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 / hàm / biến hữu ích nào.


53

Tuy nhiên, tôi rất tò mò về những gì mỗi lớp chứa 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 một tệp nguồn.

Một tệp jar về cơ bản là một tệp zip chứa các 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 tệp 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 hầu hết các định dạng nhị phân - nhưng tệp lớp được biên dịch mã thay vì mã nguồn.

Nếu bạn mở tệp jar bằng tiện ích zip hoặc chạy, jar xf foo.jarbạn có thể giải nén tệp từ đó và xem chúng. Lưu ý rằng bạn không 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.


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 bối rối 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 .class giống như một tệp .o.
joshualan

19

Cách tốt nhất để hiểu tệp jar chứa gì là thực hiện điều này:

Đi tới dòng lệnh và thực thi jar tvf jarfilename.jar


13

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

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

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

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

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


1
cộng 1 vì bạn liên kết với tiêu chuẩn
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

10

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 cơ chính cho sự phát triển của nó là để các ứng dụng Java và các thành phần cần thiết của chúng (tệp .class, hình ảnh và âm thanh) có thể được tải xuống trình duyệt trong một giao dịch HTTP duy nhất, thay vì mở 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, giúp 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 ký điện tử bởi tác giả applet để xác thực nguồn gốc của chúng.


5

Tệp Jar chứa các lớp nhị phân Java đã biên dịch ở dạng *.classcó thể được chuyển đổi thành .javalớp có thể đọc được bằng cách dịch ngược nó bằng một số trình dịch ngược mã nguồn mở. Jar cũng có một tùy chọn META-INF/MANIFEST.MFcho 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 jar.


3

Jar (Java Archive) chứa nhóm tệp .class.

1.Để tạo tệp Jar (tệp 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.Để giải nén tệp Jar (tệp giải nén)

    jar -xvf NameOfJarFile.jar

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

    jar -tvf NameOfJarFile.jar

2

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

Trong một 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à một tệp lưu trữ java đã biên dịch.

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



1

Tệp .jar chứa mã đã biên dịch (tệp * .class) và dữ liệu / tài nguyên khác liên quan đến mã đó. Nó cho phép bạn nhóm nhiều tệp thành 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 zip nên nó có khả năng nén dữ liệu mà bạn đưa vào đó.

Một 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

Sách OSGi trên thực tế định nghĩa tệp JAR là, "JAR là tệp lưu trữ dựa trên định dạng tệp ZIP, cho phép nhiều tệp được tổng hợp thành một tệp duy nhất. Thông thường, các tệp có trong kho lưu trữ là hỗn hợp các tệp và tài nguyên lớp Java đã biên dịch các tệp như hình ảnh và tài liệu. Ngoài ra, thông số kỹ thuật xác định một vị trí tiêu chuẩn trong kho lưu trữ JAR cho siêu dữ liệu - thư mục META-INF - và một số tên và định dạng tệp tiêu chuẩn trực tiếp bên trong đó, quan trọng nhất là tệp MANIFEST.MF. "


1

Chỉ cần kiểm tra xem aopalliance.jartệp có .javatệp thay vì .classtệp hay không. nếu vậy, chỉ cần giải nén tệp jar, nhập nó trong eclipse và tạo một jar thông qua nhật thực. Nó đã làm việc cho tôi.


1

Trong khi tìm hiểu về JAR, tôi đã xem qua chủ đề này, nhưng không thể có đủ thông tin cho những người như tôi, những người có nền tảng .NET, vì vậy tôi sẽ thêm một số điểm có thể giúp những người như tôi với nền tảng .NET.

Trước tiên, chúng ta cần xác định khái niệm tương tự như JAR trong .NET, đó là Assembly và assembly chia sẻ rất nhiều điểm chung với các tệp Java JAR.

Vì vậy, một assembly là đơn vị cơ bản của đóng gói mã trong môi trường .NET. Các tập hợp là độc lập và thường chứa mã trung gian từ việc biên dịch các lớp, siêu dữ liệu về các lớp và bất kỳ tệp nào khác mà mã đóng gói cần để thực hiện nhiệm vụ của nó. Vì tập hợp là đơn vị cơ bản của đóng gói mã, một số hành động liên quan đến việc tương tác với các loại phải được thực hiện ở cấp lắp ráp. Ví dụ , việc cấp quyền bảo mật, triển khai mã và lập phiên bản được thực hiện ở cấp lắp ráp.

Các tệp Java JAR thực hiện một tác vụ tương tự trong Java với hầu hết các điểm khác biệt trong việc triển khai. Các tập hợp thường được lưu trữ dưới dạng EXE hoặc DLL trong khi tệp JAR được lưu trữ ở định dạng tệp ZIP .

Nguồn thông tin -> 5- Lắp ráp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.