Bitbucket に無料で社内向けの認証あり Maven リポジトリを作成し、gradle から利用するための手順を書く。
1. Bitbucket アカウント作成・リポジトリ作成
Bitbucket のアカウントを作成し、プライベートなリポジトリを作成する。
ここでは tily というユーザー名でアカウントを作成し、maven-repository というリポジトリを作成する。
なお、社内向けのプライベートリポジトリという想定なのでデフォルトでチェックされている "This is a private repository"を外さないようにする。
2. gradle インストール
第4章 Gradleのインストール に書いてある通り、Java さえインストールしてあれば、ダウンロードしてパスを通すだけで使えるようになる。
3. プロジェクト作成〜maven リポジトリへ公開
maven リポジトリに置く用のサンプルプロジェクトを作成。
## ディレクトリ作成
$ mkdir java-project-a
$ cd java-project-a
## gradle init で jar プロジェクト用のひな形作成
$ gradle init --type java-library
:wrapper
:init
BUILD SUCCESSFUL
Total time: 4.469 secs
適当なライブラリを作成する。
$ mkdir -p src/main/java/tokyo/prgrphs/
$ vi src/main/java/tokyo/prgrphs/HelloWorld.java
内容はこんな感じ。
package tokyo.prgrphs;
class HelloWorld {
public void sayHello(String name) {
System.out.println("Hello, " + name);
}
}
作成したライブラリを jar にする。
## ビルド
$ gradle jar
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar UP-TO-DATE
BUILD SUCCESSFUL
Total time: 3.988 secs
## ビルドできたことを確認
$ jar tvf build/libs/java-project-a.jar
0 Wed Nov 26 16:33:06 JST 2014 META-INF/
25 Wed Nov 26 16:33:06 JST 2014 META-INF/MANIFEST.MF
330 Wed Nov 26 16:33:04 JST 2014 Library.class
0 Wed Nov 26 16:33:04 JST 2014 tokyo/
0 Wed Nov 26 16:33:04 JST 2014 tokyo/prgrphs/
707 Wed Nov 26 16:33:04 JST 2014 tokyo/prgrphs/HelloWorld.class
Bitbucket の URL や認証情報等を $HOME/.gradle/gradle.properties に書いておく。
$ vi ~/.gradle/gradle.properties
中身はこんな感じ。
bitbucketReadUrl=https://api.bitbucket.org/1.0/repositories/tily/maven-repository/raw/master
bitbucketWriteUrl=git:https://tily@bitbucket.org/tily/maven-repository.git?master#
bitbucketUsername=tily
bitbucketPassword=XXXXXXXX
- 読み出し用の URL には bitbucket が提供している API を利用する (API とは言っても普通にユーザー名とパスワードによる BASIC 認証でアクセスできるっぽい)
- 書き込み用の URL は下記 build.gradle で利用している wagon-git というプラグインがこういう URL でないと受け付けないのでこうしている
上記の情報を利用した build.gradle を作成する。
Maven Wagon を利用して jar を git 上の Maven リポジトリに公開するためのプラグインは 2 つ見つけたが、ar.com.synergian グループのほう は死んでるっぽいので net.trajano.wagon グループのほう を使った。
apply plugin: 'java'
apply plugin: 'maven'
configurations {
deployerJars
}
repositories {
jcenter()
}
dependencies {
deployerJars 'net.trajano.wagon:wagon-git:2.0.1'
}
uploadArchives {
repositories {
mavenDeployer {
configuration = configurations.deployerJars
repository(url: bitbucketWriteUrl) {
authentication(userName: bitbucketUsername, password: bitbucketPassword)
}
pom.groupId = 'tokyo.prgrphs'
pom.artifactId = 'hello-world'
pom.version = '0.0.0'
}
}
}
bitbucket 上の tily/maven-repository へ jar をプッシュしてみる。
$ gradle uploadArchives
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar UP-TO-DATE
:uploadArchives
Uploading: tokyo/prgrphs/hello-world/0.0.0/hello-world-0.0.0.jar to repository remote at git:https://tily@bitbucket.org/tily/maven-repository.git?master#
Transferring 1K from remote
Uploaded 1K
BUILD SUCCESSFUL
Total time: 23.545 secs
ウェブから bitbucket を見てみると、うまく登録できたっぽい。
4. maven リポジトリに公開した jar を別のプロジェクトから使ってみる
「3.」と同じようにプロジェクトのひな形を作成。
$ mkdir java-project-b
$ cd java-project-b
$ gradle init --type java-library
「3.」で maven リポジトリに公開した tokyo.prgrphs.HelloWorld ライブラリを利用したプログラムを書く。
$ vi src/main/java/tokyo/prgrphs/Main.java
内容。
package tokyo.prgrphs;
import tokyo.prgrphs.HelloWorld;
class Main {
public static void main(String[] args) {
HelloWorld helloWorld = new HelloWorld();
helloWorld.sayHello(args[0]);
}
}
build.gradle を作成。
apply plugin: 'java'
repositories {
maven {
url bitbucketReadUrl
credentials {
username bitbucketUsername
password bitbucketPassword
}
}
}
dependencies {
compile 'tokyo.prgrphs:hello-world:0.0.0'
}
ビルドしてみる。
$ gradle jar
:compileJava
:processResources UP-TO-DATE
:classes
:jar
BUILD SUCCESSFUL
Total time: 7.74 secs
ビルドできた。さらにビルドされた jar を実行してみる。
$ java -cp ~/.m2/repository/tokyo/prgrphs/hello-world/0.0.0/hello-world-0.0.0.jar:build/libs/java-project-b.jar tokyo.prgrphs.Main tily
Hello, tily
実行できた。
まとめ
- bitbucket のプライベートリポジトリを使えば無料かつ手軽に社内向け Maven リポジトリをホストできる
- 今回は gradle を使ったが素の maven とか sbt とかでも似たようなことはできると思う。あと bitbucket でなく github でも似たようなことはできそう (ただし github のプライベートリポジトリは有料)
- 今回作成したプロジェクトは tily/java-project-a, tily/java-project-b に公開した