2016-01-19 15 views
9

Tôi đã có một lớp học java và groovy đang được chạy bởi nhiệm vụ gradle. Tôi đã quản lý để làm cho nó hoạt động nhưng tôi không thích cách tôi phải vượt qua các tham số trong dòng lệnh. Dưới đây là cách tôi làm điều đó hiện thông qua dòng lệnh: gradle runTask -Pmode"['doStuff','username','password']"
đang build.gradle của tôi mà có các thông số như sau:Làm thế nào để vượt qua nhiều tham số trong dòng lệnh khi chạy nhiệm vụ gradle?

if (project.hasProperty("mode")) { 
args Eval.me(mode)} 

và sau đó tôi sử dụng lập luận của tôi/thông số trong mã java của tôi như sau:

String action = args[0]; //"doStuff" 
String name = args[1]; .. //"username" 

tôi đã tự hỏi là có cách nào để vượt qua các thông số trong một cách tốt hơn như:

gradle runTask -Pmode=doStuff -Puser=username -Ppass=password 

và cách sử dụng chúng trong các lớp java của tôi.

+0

tôi giả sử các lớp java là một phần của một mã số dự án, được điều hành bởi gradle, tôi sửa ? Nhiệm vụ của bạn chạy chúng như thế nào? – AdamSkywalker

+0

@Adam Có bạn đã đúng, nhiệm vụ của tôi chạy chúng bằng cách sử dụng javaexec và nó chạy phương thức main() trong một trong các lớp java – Tomas

+0

ok, tôi đã hiểu được vấn đề, chờ một vài phút để có câu trả lời) – AdamSkywalker

Trả lời

9

JavaExec có thể là cách để thực hiện. Chỉ cần khai báo một nhiệm vụ và vượt qua các thông số dự án ứng dụng java:

task myExecTask(type: JavaExec) { 
    classpath = sourceSets.main.runtimeClasspath 
    main = 'com.project.MyApplicationMainClass' 
    args project.getProperty('userName') + ' ' + project.getProperty('password'); 
} 

Để chạy nó, bạn chỉ cần viết gradle myExecTask -PuserName=john -Ppassword=secret

+0

Rực rỡ, làm việc như một sự quyến rũ và chỉ là những gì Tôi cần, cảm ơn ngài! – Tomas

+0

bất kỳ ý tưởng nào về điều này? Điều gì xảy ra nếu tôi muốn chạy cùng một tác vụ đó nhưng không nhận được một số thuộc tính, ví dụ tôi muốn chạy tác vụ chỉ với 'gradle myExecTask -Pmode = doStuff' và không phải 'gradle myExecTask -Pmode = doStuff -PuserName = john -Ppassword = bí mật', nó ném tôi và lỗi nói rằng các thuộc tính 'usernName' và 'mật khẩu' không được tìm thấy .. – Tomas

+1

@Tomas có, gradle ném ngoại lệ gây phiền nhiễu khi tài sản không có mặt. Cách duy nhất để tránh điều này là trước tiên hãy gọi project.hasProperty ('name') để kiểm tra xem thuộc tính đã được đặt chưa. – AdamSkywalker

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