2010-12-10 38 views
50

Tôi đang học Java những ngày này và tôi đã dành rất nhiều thời gian với .NET vì vậy khi tôi muốn xuất hoặc nhập thư viện, chúng thường có định dạng .dll được gọi là lắp ráp trong môi trường .Net và chúng được biên dịch sang IL và chúng có thể có các tài nguyên như hình ảnh, xml, âm thanh và con trai trên bất kỳ cách nào.Sự khác biệt giữa .jar và .dll file

Tôi cũng đang tự hỏi quá trình tương tự trong Java. Tôi đã đọc tài liệu nhưng họ thực sự nhầm lẫn tôi một chút và để làm rõ mọi thứ tôi cần những người giúp đỡ của bạn.

Câu hỏi:

  1. NET hội là điều tương tự như java .jar?
  2. .dll chứa mã IL đã biên dịch và .jar chứa các tệp mã lớp/byte tuân thủ?
  3. Họ nói tài nguyên, loại tài nguyên nào chúng ta đang nói đến ở đây? Hình ảnh, tệp .txt, v.v. hoặc tất cả chúng có thể?

  4. Tôi đã kiểm tra AWS (Amazon Web Service API cho java) và tôi thấy ba file .jar và họ là

    1. AWS-java-sdk-1.1.1.jar
    2. aws- java-sdk-1.1.1-javadoc.jar
    3. AWS-java-sdk-1.1.1-sources.jar

và chúng chứa các file .class - tài liệu java ở định dạng html và Các tệp .java vẫn chưa được biên dịch. Vì vậy, sau đó tôi đã nhận ra .jar không chỉ bao gồm các mã byte được biên dịch (.class) và các thứ khác.

  1. Khi tôi muốn nhập thư viện java, tôi có luôn cần nhập tệp .jar không?
  2. Khi tôi muốn xuất thư viện java của riêng mình, tôi có cần xuất tệp .jar hay không.

Cảm ơn bạn đã trợ giúp trước.

+2

Bản thân tôi đã tự hỏi điều này, ước gì tôi có thể cung cấp nhiều ưu điểm hơn !!! – John

+1

Tôi là người ngược lại. Tôi đang học NET. Những ngày này sau khi Java. – KJW

Trả lời

69

.NET Assembly có giống với java .jar không?

Chúng đóng cùng vai trò, vâng.

.dll chứa mã IL đã biên dịch và .jar chứa tệp .class/byte mã tuân thủ?

Có. Mặc dù JAR chỉ là các tệp zip (bạn có thể mở chúng trong công cụ Zip yêu thích của mình), vì vậy chúng thực sự có thể chứa bất kỳ thứ gì.

Họ nói tài nguyên, loại tài nguyên mà chúng ta đang nói đến ở đây? Hình ảnh, tệp .txt, v.v. hoặc tất cả chúng có thể?

Bất kỳ loại tệp nào đều được phép trong JAR. Mã Java của bạn có thể truy cập nội dung của các tệp trong jar thông qua, ví dụ: getResourceAsStream hoặc getResource. Rõ ràng các tệp .class trong một JAR được xử lý đặc biệt (như bytecode).

Tôi đã kiểm tra AWS (API dịch vụ web của Amazon cho java) và tôi thấy ba tệp .jar và chúng là: aws-java-sdk-1.1.1.jar, aws-java-sdk-1.1.1 -javadoc.jar, aws-java-sdk-1.1.1-sources.jar

Bao bì trên khá phổ biến. Đôi khi mọi người sử dụng .jar dưới dạng một phần mở rộng tệp thay thế cho .zip. Tôi thấy thực tế này khó hiểu, nhưng nó không phải là không phổ biến, và Amazon đã thực hiện nó trong trường hợp này. Tôi nghĩ rằng thực hành này trở nên phổ biến hơn với sự ra mắt của Maven, lưu trữ mã nguồn tham chiếu trong các tệp có tên .jar.

aws-java-sdk-1.1.1.jar - Đây là tệp duy nhất cần thiết để biên soạn và thực thi. Nó chứa các lớp (các tệp .class) và các tài nguyên cần thiết để thư viện hoạt động.

aws-java-sdk-1.1.1-sources.jar - Đây chỉ là tệp zip chứa mã nguồn (tệp .java) cho thư viện. Nó không cần thiết cho việc biên dịch hoặc thực thi. Nó được cung cấp để giúp bạn gỡ rối các vấn đề bạn có thể gặp phải trong khi sử dụng thư viện. Bạn có thể giải nén tập tin này và đọc mã nguồn từ ổ cứng của bạn. Tuy nhiên, IDE của bạn có thể sử dụng trực tiếp tệp này bằng cách tạo một "tệp đính kèm nguồn" cho thư viện JAR chính. Với thư viện này -> liên kết nguồn được thiết lập trong IDE của bạn, IDE của bạn sẽ có thể hiển thị cho bạn mã nguồn của thư viện khi bạn sử dụng tính năng "Đi tới Định nghĩa" của IDE trên một lớp thư viện.

aws-java-sdk-1.1.1-javadoc.jar - Đây chỉ là tệp zip chứa JavaDoc cho thư viện. Một lần nữa, nó không cần thiết cho việc biên dịch hoặc thực thi. JavaDoc chỉ là HTML, vì vậy bạn có thể giải nén tệp này và đọc mã JavaDoc HTML trực tiếp từ ổ cứng của bạn. Tuy nhiên, hầu hết các IDE có thể tạo một "tệp đính kèm javadoc" vào thư viện chính, cho phép bạn kéo JavaDoc theo ngữ cảnh cho thư viện từ bên trong IDE. Trên thực tế, hầu hết các IDE có thể tạo ra JavaDoc khi đang bay từ -sources.jar, vì vậy tôi hiếm khi sử dụng các javadoc lọ nữa.

Khi tôi muốn nhập thư viện java, tôi có luôn cần nhập tệp .jar không?

Nó thường được gọi là "thêm JAR vào đường dẫn lớp", nhưng có. Bạn khá nhiều luôn cần giúp Java tìm tất cả các JAR bạn đang sử dụng bằng cách xây dựng một classpath bất cứ khi nào bạn xây dựng hoặc thực thi. Nói chung, việc sử dụng các JAR và các classpath là một quy trình thủ công và rõ ràng hơn nhiều so với việc sử dụng các tệp DLL trong .NET. Ví dụ: Java không có tương đương trực tiếp với bộ nhớ cache toàn cầu của .NET; cũng vani Java sẽ không tự động tải .jars từ thư mục làm việc.

Có một vài kỹ thuật khác để tạo đường dẫn cảm giác "tự động" hơn, nhưng chúng là loại tiên tiến: đường dẫn Manifest.MF có thể, ví dụ - nhưng phương pháp này ít khi được sử dụng vì nó dễ vỡ. Kể từ Java 6, Java đã hỗ trợ hạn chế để sử dụng wildcards in the classpath.

Khi tôi muốn xuất thư viện java của riêng tôi, nên tôi cần phải xuất khẩu trong file .jar

Đây là tiêu chuẩn, vâng.

+3

Đây là một lời giải thích tuyệt vời. Cảm ơn một bó :) – Tarik

+1

Tôi sẽ thêm vào phần cuối về 'sử dụng JAR và classpath là một quá trình thủ công và rõ ràng hơn' - đây là lý do tại sao một công cụ như' Maven' là rất cần thiết, nếu chỉ cho quản lý phụ thuộc .. đối phó với tất cả các JAR không phụ thuộc JRE là một nỗi đau thực sự – mmcrae

7

Để trả lời câu hỏi cụ thể này.

  1. AWS-java-sdk-1.1.1.jar
  2. AWS-java-sdk-1.1.1-javadoc.jar
  3. AWS-java-sdk-1.1.1-sources. jar

1) là tệp lưu trữ java trình biên dịch (jar), được gọi là DLL. 2) là javadoc. Một tài liệu HTML của các lớp java (tìm thấy trong 1)) cùng với mô tả phương thức. 3) là mã nguồn (tệp java) của 1).

  1. Khi tôi muốn nhập khẩu các thư viện java, sẽ Tôi luôn luôn cần file .jar nhập khẩu?
  2. Khi tôi muốn xuất thư viện java của riêng mình, tôi có cần xuất xuất trong tệp .jar không.

Đối với 1) Nếu bạn cần sử dụng một lớp được tìm thấy trong tệp jar, bạn sẽ cần phải nhập lọ đó vào dự án của mình.

Đối với 2) Bạn không cần. Bạn có thể gói các lọ phụ thuộc của bạn vào thư viện của bạn hoặc gói chúng vào các lọ riêng của chúng và nhập chúng vào dự án của bạn.

  1. .NET Assembly tương tự như java .jar? Trả lời: Có.
  2. .dll chứa mã IL đã biên dịch và .jar chứa các tệp mã lớp/byte tuân thủ? Trả lời: tệp .jar là tệp lưu trữ tài nguyên, lớp, hình ảnh/biểu tượng/v.v. đó là cần thiết cho một ứng dụng, giống như trong .DLL. Các tệp lớp chứa các mã nguồn java biên dịch (được gọi là bytecode java).
8

tôi có thể trả lời phần của câu hỏi đó :-)

Theo tôi được biết, một jar chỉ là một "Java Archive" tập tin. Nó có thể chứa bất cứ thứ gì bạn muốn, nhưng thường được sử dụng để phân phối các phiên bản nhị phân của các thư viện. Nó cũng có thể được sử dụng để phân phối các tệp thi hành - nhấp đúp vào tệp JAR sẽ khởi chạy ứng dụng, nếu đó là cách nó được đóng gói.

Như vậy, có thể khó có thể biết được tệp jar cụ thể là gì. Ví dụ: aws-java-sdk-1.1.1-sources.jar là gì? Nó có phải là tự cài đặt không? Một kho lưu trữ mã nén? Nếu không có tài liệu đọc, đó là dự đoán của bất kỳ ai.


Edit: trường hợp tại điểm, tôi chỉ cần tải về các tập tin JAIjar giả định đó là một build nhị phân của thư viện. Nhưng trên thực tế, nó chứa ứng dụng trình cài đặt.

+0

+1 cho sự nhầm lẫn jar ... bạn không bao giờ biết cho đến khi bạn mở nó –

Các vấn đề liên quan