2017-05-27 19 views
5

私は単純なJavaクラスを作成しています。私はgradleを使用して、すぐに使用できるランチャーを作成したいと考えています。gradleのメインクラスにコマンドライン引数を渡すには?

だから私は、Gradleのを経由してJavaプログラムを実行することができるようにしたい:These are my command line argumentsが私のpublic static void main(String... args)メソッドに直接渡され

gradlew clean run These are my command line arguments

私はrunタスクを与えるapply plugin: "application"を使用しています。しかし、私が持っている「されたとして」私はこれを実行しているとき:

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

答えて

4

Gradleのビルド中に実行されるタスクを定義するには、タスク名としてハイフン(-)で始まらない各引数を解釈します。 Theseという名前のタスクは存在しないため、ビルドは失敗します。

あなたはすでに述べたように、runタスクを提供するGradle Application Pluginを使用しています。 docsは、runタスクのタイプがJavaExecであることを示しています。だから、あなたの引数を適用するために、args経由runタスクに追加します:

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

をそれぞれの引数を変更するにはbuild.gradleファイルを変更せずに構築し、単にプロジェクトのプロパティを使用します。

run { 
    args findProperty('runArgs') 
} 

とコールgradle clean run -PrunArgs='These are my command line arguments'

+0

この手法は機能しますが、問題はargs *が常に存在する必要があることです。他に何か(例えば 'gradle tasks'など)を行うと、操作は' NullPointerException'で失敗し、 'build.gradle'の上記の' args'行を指すエラーが発生します。あなたはそれを避ける方法を知っていますか? –

+0

そして、私自身の質問に答えるために: 'if(project.hasProperty( 'runArgs'){args findProperty( 'runArgs')}'はそれを行います。 –

関連する問題