2015-07-06 13 views
5

Tôi đã viết một ứng dụng Java nhỏ bằng Gradle để xây dựng nó. Ứng dụng này xuất phát từ this tutorial và chứa 2 lớp: HelloWorld (lớp chính) và Greeter. Các tập tin build.gradle chứa 2 phần (và những người khác, đó là hiện nay không thích hợp):'Không có thuộc tính tệp kê khai chính' trong khi chạy tệp JAR được tạo bằng Gradle

apply plugin: 'application' 
mainClassName = 'hello.HelloWorld' 

dependencies { 
compile "joda-time:joda-time:2.2" 
} 

(này là cần thiết, bởi vì nhập khẩu lớp HelloWorld org.joda.time.LocalTime lớp) . Tôi có thể tạo ứng dụng với gradle build và chạy ứng dụng với gradle run. Mọi thứ đều ổn và tôi nhận được kết quả. Tuy nhiên, khi tôi cố gắng chạy nó với java -jar HelloWorld.jar, tôi nhận được lỗi No main manifest attribute. Một trong những giải pháp được tìm thấy trên StackOverflow đề nghị chạy các tập tin như

java -cp HelloWorld.jar hello.HelloWorld 

hoặc

java -cp HelloWorld.jar HelloWorld 

Người đầu tiên trả Could not find or load main class HelloWorld, điều thứ hai trả java.lang.NotClassDefFoundError" org/joda/time/LocalTime. Lưu trữ JAR chứa các tệp sau:

0 Mon Jul 06 13:13:46 CEST 2015 META-INF/ 
25 Mon Jul 06 13:13:46 CEST 2015 META-INF/MANIFEST.MF 
    0 Mon Jul 06 13:13:46 CEST 2015 hello/ 
369 Mon Jul 06 13:13:46 CEST 2015 hello/Greeter.class 
988 Mon Jul 06 13:13:46 CEST 2015 hello/HelloWorld.class 

Tôi không biết tại sao gradle không đưa thông tin về lớp chính vào tệp kê khai. Bạn có đề nghị nào không? Mã này xuất phát trực tiếp từ hướng dẫn nên nó sẽ ổn, nhưng không phải. Tôi lặp lại rằng chạy các ứng dụng thông qua gradle làm cho không có vấn đề.

+0

Bản sao có thể có của [Gradle- no attribute manifest main] (http://stackoverflow.com/questions/32567167/gradle-no-main-manifest-attribute) – Xiao

Trả lời

2

Lỗi này xảy ra vì org.joda.time.LocalTime không được thêm vào đường dẫn lớp khi đang chạy hello.HelloWorld.

  1. Nó có thể chạy với classpath thiết lập với: gradle run
  2. Bạn có thể bao gồm sự phụ thuộc này trong lọ, sử dụng this plugin.
  3. Hoặc chuẩn bị phân phối với nhiệm vụ distZip, giải nén nó và sử dụng tập lệnh sh hoặc bat để chạy tạo phẩm đã chuẩn bị.
Các vấn đề liên quan