Edited at

gradle run で実行する Java の引数は --args で指定できる (Gradle 4.9 から)


概要


  • gradle run で実行する Java アプリケーションのコマンドライン引数は --args で指定することができる (Gradle 4.9 移行から可能)

  • たとえば gradle run --args="aaa bbb ccc" のように指定することで Java のメインクラスの main メソッドに文字列の配列のパラメータをセットできる

  • Gradle 4.9 より前では run タスクが実行される前処理を build.gradle に記述することで対処していた


記述例

aaa bbb ccc の3つの引数を指定する例。

$ gradle run --args="aaa bbb ccc"


公式情報

The Application Plugin


Since Gradle 4.9, the command line arguments can be passed with --args. For example, if you want to launch the application with command line arguments foo --bar, you can use gradle run --args="foo --bar" (see JavaExec.setArgsString(java.lang.String).



動作確認

OpenJDK 11.0.2 と Gradle 5.6.2 で動作を確認済み。

build.gradle と実行用の App.java を用意する。

$ tree

.
├── build.gradle
└── src
└── main
└── java
└── com
└── example
└── App.java

build.gradle ファイル。


build.gradle

plugins {

id 'java'
id 'application'
}

repositories {
mavenCentral()
jcenter()
}

application {
mainClassName = 'com.example.App'
}


App.java ファイル。

package com.example;

public class App {
public static void main(String[] args) {
System.out.println("args.length=" + args.length);
for(String arg: args) {
System.out.println(arg);
}
}
}

引数なしで gradle run を実行する。

$ gradle run

> Task :run
args.length=0

BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 executed

引数ありで gradle run を実行する。

$ gradle run --args="aaa bbb ccc"

> Task :run
args.length=3
aaa
bbb
ccc

BUILD SUCCESSFUL in 1s
2 actionable tasks: 1 executed, 1 up-to-date


Gradle 4.9 より前の対処方法

build.gradle に run タスク実行時の処理を追加する。


build.gradle

run {

// args プロパティが存在する場合は run タスクの args に渡す
if (project.hasProperty('args')) {
// 半角空白文字で分割して渡す
args(project.args.split('\\s+'))
}
}

gradle run 実行時に args プロパティを指定すると、Java アプリケーションの引数として渡される。

$ gradle run -Pargs="aaa bbb ccc"

> Task :run
args.length=3
aaa
bbb
ccc

BUILD SUCCESSFUL in 1s
2 actionable tasks: 1 executed, 1 up-to-date


参考資料