Gradleで複数JARをMavenリポジトリにアップロードする方法

Gradle小ネタです。オープンソースではなく社内の開発だと、独自ライブラリや商用のライブラリをプライベートなMavenリポジトリにアップロードしたくなります。AntやMavenでももちろんできるんだけど、大量にあるときはGradleが楽チンかも?

あるディレクトリ配下にあるJARファイルをまとめてアップロードしたい場合は以下のように書けばOK。例では全てgroupIdは"org.example.library"、versionは"1.0"にしているけど、別途マッピング情報を用意してファイル別に設定することもできるでしょう。
記述のポイントは以下の2点。

  • archivesタスクを使ってJARファイルをこのプロジェクトのartifactとして登録する
  • mavenDeployerのクロージャでaddFilterを使い、JARファイルごとにPOMの情報を設定する
apply plugin: 'maven'

def files = file('lib').listFiles()

artifacts {
    files.each { f ->
        archives f
    }
}

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "http://mycompany/content/repositories/thirdparty")
            files.each { f ->
                def id = f.name.replace(".jar", "")
                addFilter(id) { artifact, file ->
                    artifact.name == id
                }
                pom(id).groupId = 'org.example.library'
                pom(id).artifactId = id
                pom(id).version = '1.0'
            }
        }
    }
}

以下のコマンドを実行してアップロードする。libフォルダ以下のJARファイルをまとめてMavenリポジトリにアップロードしてくれます。

gradle uploadArchives

追記

サンプルはGitHubにあげておきました。