TL;DR
EmbulkのJavaプラグイン開発のときにいろいろ便利につかえるGradleのプラグインを作りました。
使い方
最低限以下の記述を build.gradle
にすれば動きます。最新バージョンは 0.5.0
です (2019/03/24現在)
plugins { id "com.github.kamatama41.embulk" version "0.5.0" } embulk { version = "0.8.18" // 使うEmbulkのバージョン category = "file-input" // 作るプラグインのカテゴリ (embulk newの時に指定するカテゴリ) name = "xlsx" // 作るプラグインの名前 // 作者名、メールアドレス、ホームページ (gemspecタスク用) authors = ["A User"] email = "a.user@example.com" homepage = "https://github.com/a.user/embulk-input-xlsx" }
何ができるか?
プラグインテンプレート生成
newPlugin
タスクを実行することで embulk new
コマンドを実行したときと同じテンプレートを生成することができます。*1
% gradle newPlugin Starting a Gradle Daemon (subsequent builds will be faster) :embulkSetup Setting Embulk version to 0.8.18 :embulk_new_java-file-input_xlsx 2017-03-21 04:12:05.020 +0900: Embulk v0.8.18 Creating embulk-input-xlsx/ Creating embulk-input-xlsx/README.md Creating embulk-input-xlsx/LICENSE.txt Creating embulk-input-xlsx/.gitignore Creating embulk-input-xlsx/gradle/wrapper/gradle-wrapper.jar Creating embulk-input-xlsx/gradle/wrapper/gradle-wrapper.properties Creating embulk-input-xlsx/gradlew.bat Creating embulk-input-xlsx/gradlew Creating embulk-input-xlsx/config/checkstyle/checkstyle.xml Creating embulk-input-xlsx/config/checkstyle/default.xml Creating embulk-input-xlsx/build.gradle Creating embulk-input-xlsx/lib/embulk/input/xlsx.rb Creating embulk-input-xlsx/src/main/java/org/embulk/input/xlsx/XlsxFileInputPlugin.java Creating embulk-input-xlsx/src/test/java/org/embulk/input/xlsx/TestXlsxFileInputPlugin.java Plugin template is successfully generated. Next steps: $ cd embulk-input-xlsx $ ./gradlew package :newPlugin BUILD SUCCESSFUL Total time: 13.166 secs
既存Gradleタスクを網羅
Embulkのプラグイン開発時、最初に embulk new java-input foo
のようなコマンドで雛形を生成すると思うのですが、そのときに出来る build.gradle で定義されてるタスクや処理はすべて利用可能です。具体的にはこのテンプレートに記述されてる以下のタスクになります。
- classpath
- gemspec
- gem
- package
- checkstyle
- gemPush
これらのタスクはプラグイン側で定義してるので、書く必要が無くなります。*2
"org.embulk:embulk-core" の依存関係を省略可能
プラグイン側で、指定した version
に対応したライブラリを追加するので以下の compile
provide
の記述を書く必要がありません。
dependencies { compile "org.embulk:embulk-core:<embulk-version>" provided "org.embulk:embulk-core:<embulk-version>" }
任意のEmbulkコマンドをGradleタスクとして実行可能
embulk_*
のタスクを実行することで任意のembulkコマンドを実行できます。コマンド引数は _
で区切ります。
たとえば、 embulk_--version
タスクは embulk --version
が実行されます。
% ./gradlew embulk_--version :embulkSetup :embulk_--version embulk 0.8.18 BUILD SUCCESSFUL Total time: 4.129 secs
embulk_gen_install_embulk-input-hoge
タスクは embulk gem install embulk-input-hoge
が実行されます。
% gradle embulk_gem_install_embulk-input-command Starting a Gradle Daemon (subsequent builds will be faster) :embulkSetup :embulk_gem_install_embulk-input-command 2017-03-22 07:21:11.578 +0900: Embulk v0.8.18 Successfully installed embulk-input-command-0.1.4 1 gem installed BUILD SUCCESSFUL Total time: 13.134 secs
テスト実行が簡単にできる
また、開発中のJavaプラグインをテスト実行(run, preview, guessなど)する場合、以下のような手順を踏むことになると思います。
gradle package
でJarライブラリを作るembulk run
の-L
オプションでクラスパスを追加する
embulk_run
タスク*3はそれを全部1コマンドにまとめたタスクです。さらに
embulk_run
の時のconfigファイルはデフォルトでconfig.yml
がembulk_guess
の時の出力ファイルはoutput.yml
指定されます。つまり
gradle embulk_run
=gradle package && embulk run config.yml -L .
gradle embulk_guess
=gradle package && embulk guess config.yml -o output.yml -L .
とほぼ同義です。設定ファイルのパスを変えたい場合は プロパティ configYaml
, outputYaml
を渡してて下さい。
$ ./gradlew embulk_guess -PconfigYaml=myconfig.yml -PoutputYaml=myoutput.yml
さいごに
Embulkプラグイン開発者の方は、是非、使ってみて下さい!