Gradle で任意の Maven 設定ファイルのローカルリポジトリ設定を適用する

Gradle のビルドスクリプトにて mavenLocal() を使用した際、${user.home}/.m2/settings.xml ファイルに localRepository 設定があれば、これを反映してくれますが、現時点では任意の Maven 設定ファイル (settings.xml) の localRepository を反映する方法は特に用意されていないようです。

  • Gradle 1.12

任意のローカルリポジトリを使うには mavenLocal() を使わず maven { url <リポジトリのパス> } とすればよいだけですので、下記の方法で任意の Maven 設定ファイルの localRepository を反映できます。

  • Maven 設定ファイルをコマンドライン引数 (-P) で指定できるようにする (下記サンプルでは maven.settings としています)
  • Maven 設定ファイルから取り出した localRepository の値を maven { url <ローカルリポジトリのパス> } で設定する

とりあえず実装してみると下記のようになります。 (Maven 設定ファイルに localRepository 設定の無いケースは考慮していない点に注意)

ビルドスクリプト build.gradle
apply plugin: 'java'

repositories {
    // プロジェクトプロパティ maven.settings の有無で処理を振り分け
    if (project.hasProperty('maven.settings')) {
        // Maven 設定ファイルをパース
        def xml = new XmlSlurper().parse(new File(project['maven.settings']))

        maven {
            url xml.localRepository.text()
        }
    }
    else {
        mavenLocal()
    }
}

dependencies {
    ・・・
}

-P<プロジェクトプロパティ名>=<値> オプションで Maven 設定ファイルを指定して実行します。

実行例
> gradle build -Pmaven.settings=settings.xml