Java エコシステムを全く追っておらず、Embulk がなにをどのように使っているのかわかっていなかったのでメモ。
Embulk で利用しているエコシステムには以下のものがある。
- gradle
- maven central
- jcenter
- rubygems
Gradle
Gradle というビルドツールを利用している。設定を groovy で書き、古き良き xml を使わないあたりがナウいようだ。
Java なプラグインを雛形から生成すると build.gradle
ファイルがおかれていて、このファイルが Gradle の設定ファイルとなっている。
build.gradle には次のような設定がある。ここで Java なライブラリをどこのレポジトリからダウンロードしてくるのか設定してある。
repositories {
mavenCentral()
jcenter()
}
gradlew (gradle ラッパー)
Java プラグインの場合、https://github.com/sonots/embulk-filter-row/tree/master/gradle/wrapper のように gradle/wrapper なるディレクトリおよび gradlew (gradlew.bat) スクリプトが作られて git レポジトリにつっこんでおく形になる。
ラッパーを使ってGradleビルドを実行すると、Gradleが自動的にダウンロードされ、それを使ってビルドが実行されるようになるようだ。
ラッパーは、バージョン管理システムにチェックインするべきです。ラッパーと一緒にプロジェクトを配布することで、前もってGradleをインストールすることなく、誰もがすぐプロジェクトで作業できるようになります。 さらにいいことに、ラッパーを使ってもらうことで、ビルドに使用されるGradleのバージョンをプロジェクトが想定しているものに強制することができます。 もちろん、ラッパーは継続的インテグレーションサーバーで作業するときも非常に便利です。サーバーでビルドの設定を行う必要がないからです。
cf. http://gradle.monochromeroad.com/docs/userguide/gradle_wrapper.html
というわけで、./gradlew classpath
のようにビルドし、./gradlew test
のようにテストを実行し、./gradlew gemPush
のように rubygems にプラグインをリリースすることになる。
Maven Central Repository
Maven Central Repository は Java のライブラリを公開する場所らしい。perl でいう cpan, ruby でいう rubygems。ただ、どうも使い勝手が良くないらしく、Java のライブラリを公開するレポジトリが他にもいくつか存在している群雄割拠の時代になっているようだ。後述の jcenter もその1つ。
JCenter
JCenter は bintray.com が提供している Java ライブラリを公開するレポジトリのようだ。
embulk 本体は Maven Central ではなくこちらで公開しているようだ。しかし、一般的な Java ライブラリは Maven Central にあることが多いので併用しているようだ。
Rubygems
プラグインの公開には rubygems を使っている(Java プラグインでも)。JRuby gem としてラップして、./gradlew gemPush
とすることにより rubygems に公開できる。
プラグインを rubygems に公開することにしているのは、jruby プラグインでも java プラグインでも分け隔てなく公開するための場所として rubygems を選定したためだろう。