Tại sao nó không tải được thuộc tính tệp kê khai lớp chính từ tệp JAR?


85

Tôi đã tạo tệp JAR theo cách này jar cf jar-file input-files. Bây giờ, tôi đang cố gắng chạy nó. Chạy nó không hoạt động (không tìm thấy lệnh jre):

jre -cp app.jar MainClass

Điều này cũng không hoạt động:

java -jar main.jar

(Không tải được thuộc tính tệp kê khai Main-Class từ main.jar).

Tôi cũng phát hiện ra rằng

Để chạy một ứng dụng được đóng gói dưới dạng tệp JAR (phiên bản 1.2 - yêu cầu tiêu đề tệp kê khai Lớp chính)

"Tiêu đề tệp kê khai Lớp Chính" là gì? Làm cách nào để tạo và đặt nó ở đâu?

Câu trả lời:


62

Tôi không chắc tôi tin rằng các triệu chứng của bạn:

  • Nếu jrelệnh không được tìm thấy, thì khi chạy jre -cp app.jarsẽ xuất hiện cùng một lỗi
  • Chỉ cần thêm tệp JAR vào đường dẫn classpath sẽ không gây ra lỗi bạn đang thấy

Tôi hy vọng bạn sẽ thấy lỗi này nếu bạn chạy:

java -jar app.jar

Tiêu đề Lớp Chính cần phải có trong tệp kê khai cho tệp JAR - đây là siêu dữ liệu về những thứ giống như các thư viện bắt buộc khác. Xem tài liệu Sun để biết cách tạo tệp kê khai thích hợp. Về cơ bản, bạn cần tạo một tệp văn bản bao gồm một dòng như sau:

Main-Class: MainClass

Sau đó chạy

jar cfm app.jar manifest.txt *.class

Cảm ơn bạn. Nó hoạt động. Tôi đã tạo tệp kê khai bằng Main-Class: MainClassvà sau đó tạo tệp .jar bằng lệnh bạn đã đưa. Sau đó, tôi đã có thể chạy chương trình của mình java -jar main.jar.
Roman

1
Một tùy chọn khác là sử dụng tùy chọn -e mà không cần tệp riêng. jar cfe app.jar MainClass *.classLưu ý: -e đã được thêm vào JDK 6.
pferate

35
  1. đặt classpath và biên dịch

    javac -classpath "C: \ Program Files \ Java \ jdk1.6.0_ updateVersion \ tools.jar" yourApp.java

  2. tạo tệp kê khai.txt

    Main-Class: yourApp newline

  3. tạo yourApp.jar

    jar cvf0m yourApp.jar manifest.txt yourApp.class

  4. chạy yourApp.jar

    java -jar yourApp.jar


9

Bạn có thể chạy với:

java -cp .;app.jar package.MainClass

Nó hoạt động đối với tôi nếu không có tệp kê khai nào trong tệp JAR.


Tôi: Tùy chọn không được công nhận: -cp. Bạn có thể xem lại câu trả lời của mình không? Bởi vì tôi không thực hiện được lệnh này. (java -cp.; app.jar package.MainClass). Đây là một lệnh hay hai lệnh?
kenorb

1
docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/… "-cp.; app.jar" sẽ thêm tệp app.jar của bạn vào đường dẫn lớp, hơn là bạn có thể chạy phương thức MainClass.main () ( MainClass nằm trong gói "package").
Dainius

1
Vì vậy, có thể trên Linux tùy chọn này (-cp) không tồn tại (của tôi là java v1.6.0_24, OpenJDK Runtime Environment (IcedTea6 1.11.3) (6b24-1.11.3-1ubuntu0.12.04.1)).
kenorb

java -version => Java HotSpot (TM) 64-Bit Server VM (xây dựng 20,1-b02, chế độ hỗn hợp) "java -cp test1.Main." tác phẩm
Dainius

/ usr / lib / jvm / java-6-openjdk-amd64 / bin / java -version => OpenJDK 64-Bit Server VM (bản dựng 20.0-b12, chế độ hỗn hợp) "/ usr / lib / jvm / java-6-openjdk -amd64 / bin / java -cp. test1.Main "hoạt động
Dainius

6

Tôi gặp lỗi này và đó là do tôi có các đối số không đúng thứ tự:

CHÍNH XÁC

java maui.main.Examples tagging -jar maui-1.0.jar 

SAI LẦM

java -jar maui-1.0.jar maui.main.Examples tagging 

1
Đây có thể chỉ là một vấn đề về bsd, tôi khá chắc rằng gần đây tôi đã làm theo cách khác.
Sridhar Sarnobat

1

Cách dễ nhất để đảm bảo rằng bạn đã tạo đúng tệp JAR có thể chạy, với tệp kê khai thích hợp, là sử dụng Eclipse để tạo tệp đó cho bạn. Trong dự án Eclipse của bạn, về cơ bản bạn chỉ cần chọn Tệp / Xuất từ ​​menu và làm theo lời nhắc.

Bằng cách đó, bạn có thể chắc chắn rằng tệp JAR của mình là chính xác và sẽ biết để xem xét nơi khác nếu vẫn còn sự cố. Quy trình được mô tả đầy đủ trong Câu hỏi thường gặp Làm cách nào để tạo tệp JAR thực thi cho chương trình SWT độc lập? .


Cảm ơn bạn đã sử dụng ExportEclipse IDE.
Ninh Pham


0

Tôi phát hiện ra rằng tôi cũng đang gặp lỗi này trong NetBeans. Tôi hy vọng những điều sau đây là hữu ích.

  1. Đảm bảo rằng khi bạn đi tới Cấu hình dự án, bạn đã đặt lớp chính mà bạn định chạy.
  2. Xây dựng hoặc Xây dựng sạch sẽ
  3. Đặt tệp jar vào nơi bạn muốn và thử: java -jar "YourProject.jar" một lần nữa tại dòng lệnh.

Đây là vấn đề tôi gặp phải vì tôi có các chương trình "thử nghiệm" khác mà tôi đang sử dụng trong NetBeans và tôi phải đảm bảo Lớp chính trong phần Chạy của cấu hình Dự án được đặt chính xác.

nhiều phước lành, John P


0

Tôi gặp lỗi tương tự khi chạy:
jar cvfm test.jar Test.class Manifest.txt

Điều gì đã giải quyết nó là thế này:
jar cvfm test.jar Manifest.txt Test.class

Tệp kê khai của tôi có điểm nhập như đã cho trong tài liệu oracle (đảm bảo có một ký tự dòng mới ở cuối tệp):
Main-Class: Test


0

Tôi phải đối mặt với cùng một vấn đề. Lệnh unix này không thể tìm thấy lớp chính. Điều này là do các phiên bản JDK thời gian chạy và thời gian biên dịch là khác nhau. Tạo jar thông qua nhật thực sau khi thay đổi phiên bản trình biên dịch java. Liên kết sau đây đã giúp tôi.

http://crunchify.com/exception-in-thread-main-java-lang-unsupportedclassversionerror-comcrunchifymain-unsupported-major-minor-version-51-0/

Hãy thử chạy jar được tạo sau bước này và sau đó thực thi nó


0

Nếu đường dẫn lớp của bạn được chỉ định đầy đủ trong tệp kê khai, có thể bạn cần phiên bản cuối cùng của môi trường thời gian chạy java. Sự cố của tôi đã được khắc phục khi tôi cài đặt lại jre 8.


0

Nếu bạn sử dụng eclipse, hãy thử bên dưới: 1. Nhấp chuột phải vào dự án -> chọn Xuất 2. Chọn tệp Runnable Jar trong phần chọn đích xuất 3. Nhập tên của jar và chọn "Gói yêu cầu ..." (nút radio thứ hai) -> Kết thúc

Hi vọng điêu nay co ich...!

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.