2017-05-27 22 views
5

Tôi đang tạo lớp Java đơn giản và tôi muốn tạo trình khởi chạy ngoài hộp bằng cách sử dụng chế độ gradle.Làm thế nào để chuyển đối số dòng lệnh đến lớp chính trong gradle?

Vì vậy, tôi muốn để có thể chạy chương trình Java qua gradle:

gradlew clean run These are my command line arguments nơi These are my command line arguments được truyền trực tiếp đến phương pháp public static void main(String... args) tôi.

Tôi đang sử dụng apply plugin: "application" cho tôi nhiệm vụ run. Nhưng khi tôi chạy này 'như là' Tôi đã có:

* What went wrong: Task 'These' not found in root project 'question1'. Some candidates are: 'test'.

Trả lời

4

Gradle giải thích mỗi đối số không bắt đầu với một dấu gạch ngang (-) như tên nhiệm vụ để xác định những nhiệm vụ sẽ được thực hiện trong thời gian xây dựng. Vì tác vụ có tên These không tồn tại nên bản dựng không thành công.

Bạn đang sử dụng Plugin ứng dụng Gradle, như bạn đã nêu, cung cấp tác vụ run. Chương trình docs, tác vụ run thuộc loại JavaExec. Vì vậy, để áp dụng lập luận của bạn, thêm chúng vào các nhiệm vụ run qua args:

run { 
    args 'These are my command line arguments' 
} 

Để sửa đổi các đối số cho từng xây dựng mà không thay đổi các tập tin build.gradle, chỉ cần sử dụng tính chất dự án:

run { 
    args findProperty('runArgs') 
} 

Và cuộc gọi gradle clean run -PrunArgs='These are my command line arguments'

+0

Cách tiếp cận này hoạt động, nhưng vấn đề nó có là các args * luôn luôn * phải có mặt. Nếu bạn làm bất cứ điều gì khác (ví dụ 'nhiệm vụ gradle') hoạt động không thành công với một' NullPointerException' và lỗi trỏ đến dòng 'args' ở trên trong' build.gradle'. Bạn có biết cách để tránh điều đó không? –

+0

Và để trả lời câu hỏi của riêng tôi: 'if (project.hasProperty ('runArgs') {args findProperty ('runArgs')}' sẽ làm điều đó. –

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