Gradleのmavenプラグインを使えば生成物をMavenリポジトリにアップロードできます。
http://www.gradle.org/docs/current/userguide/maven_plugin.html#uploading_to_maven_repositories
しかし公式ドキュメントに記載されている方法ではgitリポジトリへのアップロードは出来ません。
wagon-git を使ってみる
公式ドキュメントを読むと、各プロトコルに対してライブラリが提供されていると書かれています。これらはMaven Wagonという仕組みを使っているようです。これのgit版となるwagon-gitというライブラリを提供している人がいます。
https://github.com/synergian/wagon-git
これを使えばBitbucketにもアップロードできるのではないかと思い、試してみました。ライブラリ作者のドキュメントにはMavenからの使い方しか載っていないので、色々ググりながら(情報は少なかったですが)以下のような内容をbuildファイルに追加しました。
apply plugin: 'maven'
configurations {
deployerJars
}
dependencies {
deployerJars 'ar.com.synergian:wagon-git:0.2.3'
}
uploadArchives {
repositories.mavenDeployer {
configuration = configurations.deployerJars
repository(url: 'git:master://git@bitbucket.org:[ユーザ名]/[リポジトリ名].git') {
authentication(userName: bitbucketUsername, password: bitbucketPassword)
}
}
}
これでuploadArchivesタスクを実行すると、Uploadingというメッセージが表示され、続いてBUILD SUCCESSFULになって上手く行ったように思えたのですが、Bitbucketの方を見ると特にファイルはアップロードされてませんでした・・・。調べましたが結局原因は分からず断念しました・・・。
ローカルリポジトリにdeployしてgit pushする
もう一つ見つけた方法は、BitbucketリポジトリをcloneしたローカルリポジトリにGradleのmavenプラグインでファイルを書き込むという方法です。この場合Gradleのタスク実行後にgitコマンドを手動実行しないといけないのですが、設定は非常に単純になります。
apply plugin: 'maven'
uploadArchives {
repositories.mavenDeployer {
repository(url: 'file://localhost/ローカルリポジトリへの絶対パス')
}
}
実行するコマンドは
cd プロジェクトのルートディレクトリ
gradlew uploadArchives
cd Bitbucket上のMavenリポジトリをcloneしたディレクトリ
git commit -am '適当なコミットメッセージ'
git push origin master
という感じになると思います。
この方法はGradleだけで完結しないというのが気持ち悪く面倒くさい点ではありますが、それほど頻繁にMavenリポジトリにアップロードしないのであれば許容できる範囲の煩わしさかなあと思いました。
まとめ
wagon-gitが動けばスカッとしたのですが、ダメだったので2番目の方法を採用しました。wagon-gitのGradleでの動かし方や、もっといい方法を知っておられる方がいましたら、お教えいただきたいです・・・
追記:maven-publishプラグインを使う
ローカルリポジトリにdeployするのにmavenプラグインのuploadArchivesを使いましたが、どうやらmaven-publishプラグインというのを使うのがより新しい方法のようなので、その設定も追記します。
http://www.gradle.org/docs/current/userguide/publishing_maven.html
apply plugin: 'maven-publish'
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
repositories {
maven {
url 'ローカルリポジトリへの絶対パス'
}
}
}
このmaven-publishプラグインを使ってwagon-gitを使えないか試したのですが、依存関係を解決する方法が分からず結局成功しませんでした・・・。