Tôi đang cố gắng chạy một ứng dụng Java dòng lệnh qua Gradle như một phần của thử nghiệm tích hợp nhanh. Tôi đang chuyển các tập lệnh xây dựng của mình từ Maven, nơi điều này đã được thực hiện dễ dàng exec-maven-plugin
. Hai yêu cầu lớn của tôi là:
- Có thể chuyển các thuộc tính hệ thống sang mã Java thực thi
- Có thể chuyển args dòng lệnh sang mã Java thực thi
Xin lưu ý rằng tôi không cố đọc các thuộc tính này trong tập lệnh xây dựng, tôi đang cố đọc chúng trong chương trình Java mà tập lệnh xây dựng và thực thi.
Tôi đã tìm thấy hai bài đăng SO khác đề cập đến việc thực thi chương trình Java thông qua Gradle: một bài có câu trả lời ủng hộ việc sử dụng apply plugin: "application"
trong tệp xây dựng và gradle run
tại dòng lệnh và một bài đăng khác có câu trả lời ủng hộ cách tiếp cận đó cũng như sử dụng task execute(type:JavaExec)
trong tệp xây dựng và gradle execute
tại dòng lệnh . Tôi đã thử cả hai cách tiếp cận và không thành công.
Tôi có hai vấn đề:
(1) Tôi không thể tải tệp thực thi Java để đọc các thuộc tính hệ thống
Cho dù tôi làm điều này:
build.gradle :
apply plugin: 'application'
mainClassName = "com.mycompany.MyMain"
Dòng lệnh :
gradle run -Dmyproperty=myvalue
Hoặc cái này:
build.gradle :
task execute (type:JavaExec) {
main = "com.mycompany.MyMain"
classpath = sourceSets.main.runtimeClasspath
}
Dòng lệnh :
gradle execute -Dmyproperty=myvalue
Trong cả hai trường hợp, myproperty
không vượt qua được. Mã bắt đầu chạy từ MyMain.main (...)
đọc thuộc tính myproperty
hệ thống là null / thiếu.
(2) Tôi không thể chuyển đối số dòng lệnh
Điều này có lẽ liên quan đến vấn đề đầu tiên. Trong exec-maven-plugin
ví dụ, args dòng lệnh là mình thông qua vào thông qua một tài sản của hệ thống. Đó là trường hợp của Gradle hay có cách nào khác để truyền các đối số dòng lệnh?
Làm cách nào để truy cập các biến này? Ngoài ra, nó là tốt hơn để sử dụng apply plugin: 'application'
hoặc task execute (type:JavaExec)
?