かまたま日記3

プログラミングメイン、たまに日常

Gradleで動的にプラグインを適用する

モチベーション

とあるプロジェクトでgradle-release pluginを使っているのですが、DockerでJarをビルドするときにこのプラグインを設定していると .git ディレクトリをコピーしないと(プロジェクトがGitリポジトリじゃないと)最初のbuild.gradleの検証で失敗してしまうのですが、無駄なレイヤーが増えるのでDockerコンテナ上に.gitはあまりコピーしたくない。なので、releaseタスクを実行するときのみ上記のプラグインを有効にしたい。

方法

こちらの記事 を参考にさせてもらいました。プラグインを指定するときにapply falseをつけてallprojects ブロックの中で指定したプロパティがあるかをを使って遅延applyします。

before

plugins {
    id "net.researchgate.release" version "2.8.0"
}

release {
    git { requireBranch = 'master' }
}

after

plugins {
    id "net.researchgate.release" version "2.8.0" apply false
}

allprojects {
    if (properties.get("enableReleasePlugin") == "true") {
        apply plugin: "net.researchgate.release"
        release {
            git { requireBranch = 'master' }
        }
    }
}

これで、実行時に -PenableReleasePlugin=true をつけたときのみプラグインが適用されます。

$ ./gradlew release -PenableReleasePlugin=true