2017-05-27 21 views
5

Basit bir Java sınıfı oluşturuyorum ve işaretçiyi kullanarak kutudan çıkarılan başlatıcı oluşturmak istiyorum.Komut satırı argümanlarını, sınıftaki ana sınıfa nasıl geçiririm?

Yani gradle aracılığıyla Java programını çalıştırmak mümkün istiyorum:

These are my command line arguments benim public static void main(String... args) yönteme doğrudan geçirilen

gradlew clean run These are my command line arguments.

apply plugin: "application" kullanıyorum, bu bana run görevini veriyor. Ben 'olduğu gibi' bu çalıştırıyorum Ama bende:

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

cevap

4

Gradle her argüman oluşturma sırasında çalıştırılacaktır hangi görevlerin tanımlanması görev adı olarak tire (-) ile başlayan değildir yorumlar. These adıyla bir görev mevcut olmadığından, yapı başarısız oluyor.

Daha önce belirttiğiniz gibi bir run görevi sağlayan Gradle Uygulama Eklentisini kullanıyorsunuz. docs, run görevinin JavaExec türünde olduğunu gösterir. Yani, args aracılığıyla run görev ekleyebilir argümanlarınızı uygulamak için:

run { 
    args findProperty('runArgs') 
} 

Ve çağrı: Her build.gradle dosyayı değiştirmeden inşa için

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

argümanlar değiştirmek için, sadece proje özelliklerini kullanmak gradle clean run -PrunArgs='These are my command line arguments'

+0

Bu yaklaşım işe yarıyor, ancak sahip olduğu sorun, * her zaman * argalarının mevcut olması gerektiğidir. Eğer başka bir şey yaparsanız (örn. "Gradle görevleri") işlem bir "NullPointerException" ve "build.gradle" içindeki "args" satırına işaret eden hata ile başarısız olur. Bundan kaçınmanın bir yolunu biliyor musun? –

+0

Ve kendi sorumu cevaplamak için: eğer (project.hasProperty ('runArgs') {args findProperty ('runArgs')} '' '' 'yapacaktır. –