4

OSGi バンドルとしてロードされる jar 内にバンドルした gem をロードする際に問題があります。私は Ruby プログラマーなので、OSGi、Maven、または JRuby にはあまり詳しくありません。

私たちの目的は、gem を正しいサブディレクトリに追加し、ファイルMETA-INF/jruby.homeを再構築することです。これは、このプロジェクトの依存関係です。jruby-complete.jar

たとえば、cartesiangem は次の場所にインストールされますjruby-complete-gems-1.6.8.1.jar(元の JRuby jar との混同を避けるためにファイル名を変更しています)。

META-INF/jruby.home/lib/ruby/gems/1.8/gems/cartesian-0.6.7

jar 内にパスが存在することを確認しました。また、すべて合格する JUnit で実行されているテストもあり、ScriptingContainer.runScriptlet()以下を介して実行されている Ruby コードにいくつかのデバッグ出力を追加しました。

DEBUG: Gem.path: ["file:/home/brandanl/.m2/repository/org/jruby/jruby-complete-gems/1.6.8.1/jruby-complete-gems-1.6.8.1.jar!/META-INF/jruby.home/lib/ruby/gems/1.8", "/home/brandanl/.gem/jruby/1.9"]

したがって、OSGi にロードされてこのエラーが発生し始めるまで、これは設計どおりに機能しているように見えます。

org.jruby.embed.EvalFailedException: (LoadError) no such file to load -- cartesian
  at org.jruby.embed.internal.EmbedEvalUnitImpl.run(EmbedEvalUnitImpl.java:136)
  at org.jruby.embed.ScriptingContainer.runUnit(ScriptingContainer.java:1263)
  at org.jruby.embed.ScriptingContainer.runScriptlet(ScriptingContainer.java:1256)
  at com.raritan.polaris.plugins.dynamic.DynamicPluginManager.setPluginLoadPath(DynamicPluginManager.java:123)
  at com.raritan.polaris.plugins.dynamic.Activator.start(Activator.java:54)

Ruby のコードは基本的に次のとおりです。

require 'cartesian'

私のデバッグ出力は次のようになります。

DEBUG: Gem.path: ["classpath:/META-INF/jruby.home/lib/ruby/gems/1.8", "/root/.gem/jruby/1.9"]

gem だけを含む jar を構築したり、gem をファイルシステムにインストールして を変更したりするなど、gem をロードするいくつかの異なる方法を見てきましたが、jruby.homeテスト中に機能するため、このアプローチの何が問題なのかを理解したいと思います。私たちのプロジェクト jar には間違いなく が含まれてjruby-complete-gems-1.6.8.1.jarおり、そのMANIFEST.MFファイルには正しいBundle-Classpathディレクティブが含まれています。

Bundle-ClassPath: .,scripts,lib/jruby-complete-gems-1.6.8.1.jar

JRuby 1.6.8 にデフォルトでバンドルされている gem を読み込んでみましたが、同じように失敗しました。JRuby 自体の問題ではなく、環境の問題だとrake思いますsources

ここに含めると他に何が役立つかわかりませんので、提案をいただければ幸いです。

4

0 に答える 0