我希望将一个ruby(JRuby)包装器放在一个中等大小的Java库上,我正在寻找有关从包装到策略的各种最佳实践的建议和文章.
我在这里找到了一个关于这个主题的相对过时的(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库将捆绑在许多宝石中,最终你会拥有捆绑不兼容版本的宝石.我通过打包只包含Java库JAR的gems来解决这个问题(例如参见scala-library-jars和ning-compress-jars),然后让我的包装器依赖于那个gem.它不是一个特别可扩展的解决方案,但至少它比在包装器gem中捆绑JAR更易于管理.
你的问题不清楚你想要知道什么,我建议你修改并更具体.然而,这里有一些随意的东西
java_import进入全球范围.这会给每个人带来很多麻烦.请记住,java_import不像import在Java中它是唯一在该文件中,它实际上创造范围的别名.包装java_import和include_package模块.import- 它与Rake不兼容.wiki 页面:Scripting Java from JRuby (jruby 1.0+)包含极好的建议和想法,您可以利用它们来获取包装器
我认为使用模块名称来限制对导入的 Java 类的访问范围很有趣
例如:创建一个名为JavaLangDemo的 Ruby 模块,其中包含 Java 包 java.lang 中的类。
module JavaLangDemo
include_package "java.lang"
# alternately, use the #import method
import "java.lang"
end
Run Code Online (Sandbox Code Playgroud)
现在,您可以在所需的 Java 类名称前加上 JavaLangDemo:: 来访问包含的类:
version = JavaLangDemo::System.getProperties["java.runtime.version"]
=> "1.5.0_13-b05-237"
processors = JavaLangDemo::Runtime.getRuntime.availableProcessors
=> 2
Run Code Online (Sandbox Code Playgroud)
本文还解释了以下主题:
并包含指向“相关文章”的有用链接列表,以获取有关 Java 集成层的更多信息
| 归档时间: |
|
| 查看次数: |
1796 次 |
| 最近记录: |