中規模の Java ライブラリに Ruby (JRuby) ラッパーを配置することを検討しており、パッケージングから戦略までのすべてのベスト プラクティスに関するアドバイスと記事を探しています。
ここで、このトピックに関する比較的古い (2009) ディスカッションを見つけました: http://www.ruby-forum.com/topic/188447。
JRuby の最新バージョンを使用したいと考えています。
中規模の Java ライブラリに Ruby (JRuby) ラッパーを配置することを検討しており、パッケージングから戦略までのすべてのベスト プラクティスに関するアドバイスと記事を探しています。
ここで、このトピックに関する比較的古い (2009) ディスカッションを見つけました: http://www.ruby-forum.com/topic/188447。
JRuby の最新バージョンを使用したいと考えています。
Javaライブラリ用のラッパーをいくつか作成しました(Eurydice、HotBunnies、MessagePack、Rubydoop、Mikkaなど)。それらのいくつかは、Javaライブラリーを適応させたJRubyコードであり、JRubyランタイムとインターフェースするJavaコードを含むものもあります(MessagePackは実際には完全にJavaで記述されています)。
私が見つけたのは、Javaライブラリ用のJARファイルを出荷する方法です。それをgemに含めたくないのは、最終的にJAR地獄に陥ってしまうからです。Nettyのような一般的なJavaライブラリは多くのgemにバンドルされ、最終的には互換性のないバージョンをバンドルするgemが作成されます。この問題は、JavaライブラリJARのみを含むgemをパッケージ化して(たとえば、scala-library-jarsやning-compress-jarsを参照)、ラッパーをそのgemに依存させることで解決しました。これは特にスケーラブルなソリューションではありませんが、少なくとも、JARをラッパーgemにバンドルする場合よりも管理しやすくなります。
あなたの質問は、あなたが知りたいことを正確に明確にしていないので、修正してより具体的にすることをお勧めします。しかし、ここに私の頭の上からいくつかのランダムなものがあります
java_import
グローバルスコープに入らないでください。それは皆にとって多くの問題を引き起こすでしょう。これは、ファイルに対してローカルであるだけのJavaとは異なり、実際にはスコープ内にエイリアスを作成していることを忘れないでくださいjava_import
。import
ラップjava_import
しinclude_package
てモジュールに入れます。import
-Rakeとは互換性がありません。wiki ページ: Scripting Java from JRuby (jruby 1.0+)には、ラッパーを入手するために利用できる優れたアドバイスとアイデアが含まれています。
モジュール名を使用して、インポートされたJavaクラスへのアクセスをスコープするのは興味深いと思います
例: Java パッケージ java.lang のクラスを含むJavaLangDemoという名前の Ruby モジュールを作成します。
module JavaLangDemo
include_package "java.lang"
# alternately, use the #import method
import "java.lang"
end
これで、目的の Java クラス名の前に JavaLangDemo:: を付けて、含まれているクラスにアクセスできます。
version = JavaLangDemo::System.getProperties["java.runtime.version"]
=> "1.5.0_13-b05-237"
processors = JavaLangDemo::Runtime.getRuntime.availableProcessors
=> 2
この記事では、次のトピックについても説明します。
また、Java 統合レイヤーの詳細については、「関連記事」への便利なリンクのリストが含まれています。