问题标签 [gems-in-a-jar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - Jruby Gems-in-a-jar 问题
我正在尝试用 ruby 编写一些代码(使用 jruby),以使用 jrubyc 编译为 java 字节码并部署到远程机器上,它将在 JVM 上运行(那里没有可用的 ruby)。
只要我乐于使用标准的 jruby 库,一切都可以正常工作。正如 jruby 网站上所解释的,我只是将 jruby-complete.jar 库复制到远程机器上,并在运行时将其包含在类路径中。我启动了我编译的脚本,它可以工作:酷!
当我需要一些其他库(通常是 rubygems)来运行我的脚本时,问题就开始了。
我知道像 rawr 这样很酷的东西——我成功地测试过——将你需要的所有东西放在一个包中。然而,这不是我正在寻找的解决方案:我将有许多小脚本独立运行,我不希望每个脚本都增长到至少 10 MB,因为我疯狂地在每个脚本中都包含了 jruby-complete.jar他们。
我想要的是为我需要使用的每个库编译一个.jar,将它们全部放在远程机器上的一个公共文件夹中,并在我运行编译的 jruby 脚本时在运行时将它们包含在类路径中JVM。
这就是说,我尝试按照此处的说明进行操作:http: //blog.nicksieger.com/articles/2009/01/10/jruby-1-1-6-gems-in-a-jar
我完全尝试了显示的示例在那里,与“慢性”宝石。一步一步来:
- 在本地安装gem:java -jar jruby-complete-1.1.6.jar -S gem install -i ./chronicchronic --no-rdoc --no-ri
- 将其打包到一个 jar 中: jar cfchronic.jar -C Chronic 。
编写两行测试脚本,将其保存为 testt.rb:
需要 'chronic'
Chronic.parse('tomorrow')编译:jrubyc testt.rb
- 使用以下命令运行生成的 java 类 testt.class(将 jruby-complete.jar 和chronic.jar 与 java 类放在同一文件夹中): java -cp .:/jruby-complete.jar:./chronic.jar测试
我收到以下错误:
线程“主”文件中的异常:/Users/ave2/NetBeansProjects/jrubywatir/lib/jruby-complete.jar!/METAINF/jruby.home/lib/ruby/site_ruby/shared/builtin/core_ext/symbol.rb:1:在“const_missing”中:
来自 testt.rb:2的未初始化常量 Chronic (NameError)
...已删除内部 jruby 堆栈...来自
(unknown).(unknown)(:1)
的 Module.const_missing(testt.rb:2 )
我真的不明白我做错了什么,我完全坚持这一点。我是 Ruby 的菜鸟,更习惯于 Python:不要错过让异教徒皈依的机会!:-) 谢谢。
ruby - 在Ant中调用的jRuby找不到宝石,我做错了什么
我在 Ant 目标中有以下内容:
假设路径是正确的(我在这个例子中稍微改变了它们)。
我的构建失败,因为找不到 Gems 并显示错误消息:
如果我通过它安装 Gemsgem
将起作用,但我不想这样做,因为我无法保证构建服务器上会出现什么。
ruby - 如何使用便携式 JRuby 处理 gem?
我们在构建的某些部分使用 Ruby 脚本。为了执行它们,我们使用了 JRuby(完整的 jar),到目前为止,我们还没有使用 stdlib 之外的任何 gem。例如,如果我想使用来自 github 的三个 gem,我将如何处理?
我知道Nick Sieger 的 Gems-in-a-jar文章,但它是从 2009 年开始的。它仍然是公认的方法还是 JRuby 引入了另一种实现相同结果的方法?
rubygems - 如何在嵌入式 JRuby 中使用 gems-in-a-jar?
我想在我的构建过程中使用出色的Sass 。我的构建过程由Gradle管理。这意味着编写一个插件来运行 Sass。Sass 是 Ruby,Gradle 是在 Groovy 中,但由于 Groovy 在 JVM 上运行,我可以使用JRuby来运行它,使用 Java脚本 API。Gradle 脚本以 jar 文件的形式获取依赖;我可以从Maven Central获取 JRuby ,但我需要自己将 Sass 打包为 jar。
我尝试按照Nick Sieger 的 gems-in-a-jar 程序来执行此操作,但没有成功。无论我做什么,我都无法让 JRuby 拿起 Sass gem。
为了隔离这个问题,我编写了一个最小的 Java(不是 Gradle)程序,它试图通过 JRuby 使用 Sass——我创造性地称之为 JSass:
有两三个有趣的地方。第一个是脚本generate-gem-jar.sh,它构建 gem jar:
第二个是运行 JRuby 的so.demo.JSass类:
第三个是主类试图用来操作 Sass 的 Ruby 脚本:
该程序能够加载 JRuby 引擎并执行脚本,但它在 处失败require 'sass'
,说:
我究竟做错了什么?