我希望将一个ruby(JRuby)包装器放在一个中等大小的Java库上,我正在寻找关于从包装到策略的各种最佳实践的建议和文章。
我在这里找到了一个关于这个主题的相对过时的(2009)讨论:http://www.ruby-forum.com/topic/188447。
我希望使用最新版本的JRuby。
答案 0 :(得分:8)
我为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
与Java中的import
不同,它只是文件的本地,它实际上是在范围内创建别名。在模块中包装java_import
和include_package
。import
- 它与Rake不兼容。答案 1 :(得分:3)
维基页面:Scripting Java from JRuby (jruby 1.0+)包含您可以用来获取包装的优秀建议和想法
我觉得有趣的是使用Module名称来限制对导入的Java类的访问
例如:创建一个名为 JavaLangDemo 的Ruby模块,其中包含Java包java.lang中的类。
module JavaLangDemo
include_package "java.lang"
# alternately, use the #import method
import "java.lang"
end
现在,您可以使用JavaLangDemo ::为所需的Java类名称添加前缀,以访问包含的类:
version = JavaLangDemo::System.getProperties["java.runtime.version"]
=> "1.5.0_13-b05-237"
processors = JavaLangDemo::Runtime.getRuntime.availableProcessors
=> 2
该文章还解释了以下主题:
并包含“相关文章”的有用链接列表,以获取有关的更多信息 Java集成层