こちらのIssueで紹介されている通りです。
https://github.com/embulk/embulk/issues/421
(Issueだとあんまり気付かれないので、Issueと内容は同じですが、qiitaでのシェアを目的としてます。)
EmbulkEmbed
というクラスを呼び出して、下記にようにすればJavaからEmbulkを実行できます。
EmbulkのJarはhttps://dl.bintray.com/embulk/maven/
とかから最新版をダウンロードすると良いと思います。
import java.io.File;
import org.embulk.EmbulkEmbed;
import org.embulk.EmbulkEmbed.Bootstrap;
import org.embulk.config.ConfigLoader;
import org.embulk.config.ConfigSource;
public class EmbulkEmbedTest {
public static void main(String[] args) throws Exception {
Bootstrap bootstrap = new EmbulkEmbed.Bootstrap();
EmbulkEmbed embulk = bootstrap.initializeCloseable();
try {
ConfigLoader loader = embulk.newConfigLoader();
ConfigSource source = loader.fromYamlFile(new File(args[0]));
embulk.run(source);
} finally {
embulk.destroy();
}
}
}
注意点としては、EmbulkのPluginがJRubyを使うため、それを参照させるように必要があります。すでにembulk gem install ...
でPluginをインストールしている場合には、下記のようにライブラリがインストールされているので参照すると良いかと思います。
Linux/OSX/*BSD
export GEM_HOME=/user/.embulk/jruby/2.2.0
ただ、Embulkはあんまり外部プログラムに組み込むことは想定していないので、Javaからシェルを呼び出して実行したほうが良いかもしれない、みたいです。
参考までに。