Help us understand the problem. What is going on with this article?

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

参考資料

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away