2012-04-12 39 views
16

Tôi đang cố tạo tệp .jar bằng thiết bị đầu cuối mac nhưng có chút rắc rối. Tôi đã làm theo các bước here nhưng không thành công. Tôi nhận được thông báo lỗi này:Cách tạo tệp .jar bằng thiết bị đầu cuối

Failed to load Main-Class manifest attribute from 
aclient.jar 

Vậy chính xác bạn sẽ làm như thế nào? Chương trình java của tôi được gọi là Main.java và tôi đã biên dịch nó thành một tệp .class. Bây giờ tôi phải làm gì?

Cảm ơn

Trả lời

40

1) Đảm bảo rằng tất cả các file cần thiết được trong thư mục, bạn đã mở một terminal/Command Prompt và đã điều hướng đến thư mục đó.

2) Biên dịch lớp java, ví dụ HelloWorld.java với

javac HelloWorld.java 

3) Điều này sẽ tạo ra một tập tin .class cần thiết cho các tập tin JAR.

4) Tiếp theo, tạo một file manifest (lưu bằng cách sử dụng phần mở rộng .txt) bằng cách sử dụng soạn thảo văn bản và nhập sau

Main-Class: HelloWorld 

hoặc bất cứ tên của tập tin của bạn.

5) Tiếp theo tạo ra các tập tin JAR sử dụng mã này:

jar cfm HelloWorld.jar Manifest.txt HelloWorld.class 

6) Chạy file:

java -jar HelloWorld.jar 

Nếu bất cứ điều gì dường như không rõ ràng tham khảo các trang web này: creating a jar filesetting an applications entry point.

Hy vọng điều này sẽ giúp người khác, cổ vũ Tom!

Edit:

Sau comment inga của nó đáng chú ý là để bao gồm nhiều file trong jar bạn cần phải sử dụng:

javac *.java 

Tiếp theo

jar cfm HelloWorld.jar Manifest.txt *.class 
+0

Cảm ơn bạn ! Tôi đã gặp một số rắc rối theo hướng dẫn của bạn bởi vì tôi có nhiều tệp java trong dự án của mình. Lúc đầu, tôi nghĩ tôi chỉ cần biên dịch lớp chính của mình nhưng nếu bạn có nhiều tệp java, bạn phải biên dịch tất cả chúng thay vì "javac HelloWorld.java", bạn sẽ phải thực hiện "javac * .java" và "jar cfm HelloWorld.jar Manifest.txt HelloWorld.class "sẽ là" jar cfm HelloWorld.jar Manifest.txt * .class ". Tuy nhiên bạn chỉ phải nêu rõ lớp chính trong tệp kê khai. Hy vọng điều này sẽ giúp nếu ai đó làm sai lầm tương tự tôi đã làm. – inga

+1

@inga Tôi đã cập nhật câu trả lời của mình để bao gồm nhận xét của bạn. Cảm ơn vì thông tin! – Katana24

2

Bạn cần có một tập tin văn bản định nghĩa lớp học chính. ví dụ

% cat MyMain 
Main-Class: HelloWorld 

sau đó

%jar cvfm foo.jar MyMain *.class 
%java -jar foo.jar 
Hello world 

Xem: http://java.sun.com/j2se/1.4.2/runtime.html#example

+0

Tôi đi theo liên kết của bạn và tạo ra một ví dụ đơn giản. Đối với các tập tin văn bản là nội dung chỉ Main-Class: HelloWorld Hoặc nên có một số văn bản khác trong đó. Cũng nên lưu nó dưới dạng tệp .txt hoặc bằng .mf hoặc gì đó? – Katana24

+1

Btw Tôi vẫn không nhận được lỗi Loa chính của Lớp chính ngay cả sau khi làm theo lời khuyên của bạn:/ – Katana24

+0

Hãy thử% jar xvf foo.jar đã tạo: META-INF/ tăng cao: META-INF/MANIFEST.MF tăng cao: HelloWorld.class và sau đó nhìn vào MANIFESTMF nó sẽ trông giống như Manifest-Version: 1.0 Created-By: 1.6.0_31 (Apple Inc.) Main-Class: HelloWorld –

3

Có lẽ đây sẽ giúp tệp Manifest.txt lại:

Cảnh báo: Tệp văn bản phải kết thúc bằng ne w dòng hoặc vận chuyển trở lại. Dòng cuối cùng sẽ không được phân tích cú pháp đúng nếu nó không kết thúc bằng một dòng mới hoặc trả về dòng.

4

Có, chúng tôi cần sử dụng dòng mới ở cuối tên lớp ...Nó làm việc cho tôi

ví dụ: Main-Class: HelloWorld

It will look like this in Notepad++ 
1.Main-Class: HelloWorld 
2. 
Các vấn đề liên quan