LoginSignup
7
7

More than 5 years have passed since last update.

Bitbucketのprivate MavenリポジトリにGradleの生成物をアップロードする

Last updated at Posted at 2014-08-20

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ファイルに追加しました。

build.gradle
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コマンドを手動実行しないといけないのですが、設定は非常に単純になります。

build.gradle
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

build.gradle
apply plugin: 'maven-publish'

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
    repositories {
        maven {
            url 'ローカルリポジトリへの絶対パス'
        }
    }
}

このmaven-publishプラグインを使ってwagon-gitを使えないか試したのですが、依存関係を解決する方法が分からず結局成功しませんでした・・・。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7