Go to list of users who liked
Share on X(Twitter)
Share on Facebook
More than 5 years have passed since last update.
jar-dependencies を使って jruby gem (or アプリケーション) の jar 依存を解決する
jar-dependencies を利用すると maven レポジトリから jar をその依存も含めてダウンロードして、jar の依存解決をすることができる。もちろん、バージョン指定もできる。なお、jar-dependencies gem はjruby にデフォルトでバンドルされている。
小話
最初はmkristian/jbundler が良さそうと思って使っていたのだが、どうやらmkristian/jar-dependencies が jruby にデフォルトでバンドルされるようになり、こちらがスタンダードになった模様。
gem の場合
gemリリース時にjarをバンドルしてしまいたい場合
gem に jar を入れ込んでリリースしてしまう方法
- https://github.com/mkristian/jar-dependencies#vendoring-your-jars-before-packing-the-jar
- examples/gem-with-jar-dependencies/mygem.gemspec
gemspec を以下のように変更。requirements にインストールしたい jar (maven レポジトリのパス)とバージョンを指定する。なおrequirements は、オプションの指定が色々あるので詳細はこの辺を参照。
# important so jar-dependencies knows it should look for# jar declarations in the requirements section !s.platform='java's.requirements<<"jar org.bouncycastle:bcpkix-jdk15on, 1.49"s.files+=Dir['lib/*.jar']次のような rake タスクを書いて
require'jars/installer'task:install_jarsdoJars::Installer.vendor_jars!endbundle exec rake install_jars しておくと、lib 以下に jar ファイルが vendoring される。
jar が gem に含まれるように gemspec にs.files += Dir['lib/*.jar'] と書いている。
補足:jar-dependencies は jruby に標準で bundle されているので、gemspec に追加不要。
補足:~/.m2/repository に jar がダウンロードされ、それが lib に vendoring (コピー)される。JARS_HOME 環境変数で~/.m2/repository のパスは変更できる。
gemインストール時にjarをダウンロードしたい場合
gem には jar を入れ込まずに、ユーザが gem install したタイミングでダウンロードさせる
- https://github.com/mkristian/jar-dependencies#reduce-the-download-and-reuse-the-jars-from-maven-local-repository
- example/gem-with-empty-jar-and-jar-dependencies.gemspec
gemspec を以下のように変更。requirements にインストールしたい jar (maven レポジトリのパス)とバージョンを指定する。なおrequirements は、オプションの指定が色々あるので詳細はこの辺を参照。
# important so jar-dependencies knows it should look for# jar declarations in the requirements section !s.platform='java's.requirements<<"jar org.bouncycastle:bcpkix-jdk15on, 1.49"s.add_runtime_dependency'jar-dependencies',"~> 0.3.5"runtime dependency にjar-dependencies を書いておくと、rubygems_plugin.rb によって gem インストール時に post install が発動して、依存 jar をダウンロードしてくれるようになる。
補足:~/.m2/repository に jar がダウンロードされ、それが lib に vendoring (コピー)される。
なので、~/.m2/repository にすでに存在していれば再度ダウンロードされることなく、vendoring (コピー)が行われる。JARS_HOME 環境変数で~/.m2/repository のパスは変更できる。
注意: jruby にデフォルトで bundle されている jar-dependencies と同じバージョンに合わせないと、起動時に以下のようなエラーが出てしまうもよう。解決待ち。
Gem::LoadError: You have already activated jar-dependencies 0.3.5, but your Gemfile requires jar-dependencies 0.3.10.rubyスクリプトからのjar読み込み
Vendoring されると、lib/gem-name_jars.rb のようなファイルが作られる (例:triglav-agent-hdfs_jars.rb) ので jar ライブラリにアクセスする ruby ファイル内で、以下のように require する。
require'gem-name_jars'アプリケーションの場合
To be written
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme
