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

Gradleには設定ファイルがいっぱい

More than 5 years have passed since last update.

gradle便利ですね。でもgradle界隈の人が言うほど簡単じゃない・・・。
gradleは柔軟な代わりにいろいろ設定の書き方があって混乱するので整理してみました。

基本的な構成

myproject/
├── build.gradle
├── gradle.properties
└── settings.gradle

build.gradleも設定ファイルといえば設定ファイルなのですが、ここではbuild.gradleの外のものを設定ファイルとして書き連ねることにします。

init.gradle

初期化スクリプトで、Gradleオブジェクトに対するなにがしかを行うものだそうです。
今のところそんなに興味がないのでリンクを貼るだけで終わります。

settings.gradle

設定スクリプトでSettingsオブジェクトに対するなにがしかを行うものだそうです。
ほとんどマルチプロジェクト用の設定ファイルと考えて良さそうです。
ルートプロジェクトの直下に置きましょう。

gradle.properties

これが一番使えるやつかと。
設定が効く強さはユーザーホームディレクトリのファイル>プロジェクト直下のファイルという順序です。

いわゆるpropertiesファイル形式で、こんなかんじです。

gradle.properties
hoge.fuga=hogehogefugafuga
piyo=piyopiyo

ただ若干クセがあります。
下記は正常に処理されますが、

build.gradle
task hoge << {
  println "value:${piyo}"
}

下記はNGです。

build.gradle
task hoge << {
  println "value:${hoge.fuga}"
}

このように書く必要があります

build.gradle
task hoge << {
  println "value:" + getProperty("hoge.fuga")
}

なんでだろ・・・

apply from で好きなファイルを取り込める

ディレクトリ構造
myProject
├── build.gradle
└── settings
    └── confA.gradle
build.gradle
apply from: "settings/confA.gradle"

task hoge << {
  println "value:${nanika}"
}
settings/confA.gradle
ext {
  nanika="なにか?"
}
  • groovyスクリプトで記述できるのでIF文を入れたり柔軟にできます。
  • ext {...} ブロックを使用する必要があります。

設定ファイルじゃないけど・・・

-Pオプション

コマンドラインから前述のgradle.propertiesファイルと同じことができます。

$ ./gradlew hoge -Phoge.fuga=commandline

gradle.properties と被った場合にはこちらのほうが強いです。

-Dオプション

$ ./gradlew hoge -Dhoge.fuga=commandline

-Pオプションと違ってJVMのプロパティになります。
build.gradle内で参照するためのものではなく、その目的は-Pを使ってくれと。
(System.getProperty("hoge.fuga")で参照はできるんだろうけど・・・素直に-Pがいいと思われ)

環境変数

ORG_GRADLE_PROJECT_piyo=envpiyo-Ppiyo=envpiyo と同じ意味です。
環境変数名に.(ドット)は使えないので ORG_GRADLE_PROJECT_hoge.fuga=envvvというのはできないっぽいです。

ext{...}ブロック

apply from のところでも登場していますが、これはbuild.gradleの中に書いてもいいです。
その実態はExtraPropertiesExtensionオブジェクトです。

これも癖があって、

ext {
  hoge.fuga="extで設定したよ"
}

これはエラーになります。

ext {
  set("hoge.fuga","extで設定したよ")
}

これなら出来るんだけどタスクの中で ext.get("hoge.fuga")で取り出せるのかと思ったら怒られた・・・


ということで、

  • gradle.properties
  • apply from で取り込む
  • -Pで指定
  • 環境変数で指定

この辺りじゃないかなと思います。

NewGyu
Why not register and get more from Qiita?
  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