2017-05-27 16 views
5

Tworzyłem prostą klasę Java i chciałbym stworzyć out-of-the-box launcher przy użyciu gradle.Jak przekazywać argumenty wiersza polecenia do głównej klasy w gradle?

Więc chcę móc uruchomić program Java poprzez Gradle:

gradlew clean run These are my command line arguments gdzie These are my command line arguments są przekazywane bezpośrednio do mojego sposobu public static void main(String... args).

Używam apply plugin: "application", która daje mi zadanie run. Ale kiedy używam tego „jak jest” Mam:

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

Odpowiedz

4

Gradle interpretuje każdy argument nie wychodząc z myślnikiem (-) jako nazwy zadania, aby określić, które zadania będą wykonywane w trakcie budowy. Ponieważ zadanie o nazwie These nie istnieje, kompilacja kończy się niepowodzeniem.

Korzystasz z aplikacji Gradle Application Plugin, która, jak już wspomniano, zapewnia zadanie run. docs pokazuje, że zadanie run jest typu JavaExec. Tak, aby zastosować argumenty, dodaj je do zadania run poprzez args:

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

Aby zmodyfikować argumenty dla każdego budować bez zmiany pliku build.gradle, wystarczy użyć właściwości projektu:

run { 
    args findProperty('runArgs') 
} 

i zadzwoń gradle clean run -PrunArgs='These are my command line arguments'

+0

To podejście działa, ale problem polega na tym, że argumenty * zawsze * muszą być obecne. Jeśli zrobisz cokolwiek innego (np. 'Gradle tasks') operacja kończy się niepowodzeniem z' NullPointerException' i błędem wskazującym na powyższą linię 'args' w' build.gradle'. Czy znasz sposób, aby tego uniknąć? –

+0

I odpowiedzieć na moje własne pytanie: 'if (project.hasProperty ('runArgs') {args findProperty ('runArgs')}' zrobi to. –

Powiązane problemy