2013-10-01 17 views
11

Tôi có những file này trong <project_root> thư mục:Làm thế nào để thực hiện một lớp học chính trong một cái lọ từ gradle sử dụng lệnh 'java'

./build.gradle 
./build/libs/vh-1.0-SNAPSHOT.jar 
./libs/groovy-all-2.1.7.jar 
./src/main/groovy/vh/Main.groovy 

Trong tập tin build.gradle, tôi có nhiệm vụ này:

task vh(type:Exec) { 
    commandLine 'java -cp libs/groovy-all-2.1.7.jar:build/libs/' + 
      project.name + '-' + version + '.jar vh.Main' 
} 

các Main.groovy tập tin rất đơn giản:

package vh 

class Main { 
    static void main(String[] args) { 
     println 'Hello, World!' 
    } 

} 

Sau khi cắm vào các giá trị chuỗi , dòng lệnh là:

java -cp libs/groovy-all-2.1.7.jar:build/libs/vh-1.0-SNAPSHOT.jar vh.Main 

Nếu tôi chạy lệnh trực tiếp từ trình bao, tôi nhận được kết quả chính xác. Tuy nhiên, nếu tôi chạy gradle vh, nó sẽ thất bại. Vì vậy, làm thế nào để tôi làm cho nó hoạt động? Cảm ơn nhiều.

Trả lời

13

Exec.commandLine mong đợi một danh sách giá trị: một giá trị cho tệp thực thi và một giá trị khác cho mỗi đối số. Để thực thi mã Java, tốt hơn nên sử dụng tác vụ JavaExec:

task vh(type: JavaExec) { 
    main = "vh.Main" 
    classpath = files("libs/groovy-all-2.1.7.jar", "build/libs/${project.name}-${version}.jar") 
} 

Thông thường, bạn sẽ không phải mã hóa đường dẫn lớp như vậy. Ví dụ, nếu bạn đang sử dụng các plugin groovy, và groovy-all đã được khai báo là một sự phụ thuộc compile (và biết rằng Jar thứ hai được tạo ra từ các main nguồn), bạn thà làm:

classpath = sourceSets.main.runtimeClasspath 

Để tìm hiểu thêm về các loại nhiệm vụ ExecJavaExec, tham khảo Gradle Build Language Reference.

+0

Cảm ơn bạn rất nhiều. Giải pháp của bạn tốt hơn nhiều so với giải pháp ban đầu của tôi. – JBT

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