【问题标题】:how to make warbler compile ruby files with --javac?如何让warbler用--javac编译ruby文件?
【发布时间】:2013-12-29 04:18:17
【问题描述】:

我正在使用 warbler 用 ruby​​ 类构建一个 jar,以便它可以作为交互式应用程序运行。现在,我想将该 jar 用作我的 java 应用程序中的库。我注意到,warbler 生成的 jar 包含使用 jrubyc 编译的 ruby​​ 类,而没有 --javac 选项。那么有谁知道如何使用 warbler 生成一个 jar,以便它可以作为独立应用程序运行,也可以用作 Java 项目中的库,以便可以在 Java 中创建 ruby​​ 类的对象?

以下是我的 ruby​​ 代码的结构:

core
    |--- lib
        |----a.rb
        |----b.rb
    |---java_lib

a.rb 内容:

require 'b'
class A
    def test
        ob=b.new
        puts ob.test
    end
end

b.rb 内容:

class B
    def test
        puts "test"
    end
end

然后,我使用warbler创建了一个jar,将一个jar放在另一个java项目的类路径中并尝试访问a.test。但它说“无法加载--b”

【问题讨论】:

  • “要求代码的问题必须证明对正在解决的问题有最低限度的了解。包括尝试的解决方案、为什么它们不起作用以及预期的结果。另请参阅:Stack Overflow question checklist"
  • 目前我无法在 java 中使用 jar 中的 ruby​​ 类。我正在想办法给他们打电话。为此,我相信我编译的 ruby​​ 类应该与 java 兼容,这可以使用“jrubyc”和“--javac”作为选项。但我不知道如何在 warbler 中传递这些选项,以便最终 jar 可以作为独立运行,也可以用作 java 应用程序中的库。如果您需要莺配置或任何特定的东西,请告诉我。目前我没有任何实现,因为我正在寻找如何使其工作。
  • 来自 jrubyc 的帮助:--javac Generate and compile .java classes to accompany the script。通过快速测试,此选项会同时创建 .class.java 文件。您出于某种原因需要.java 文件吗?您能否修改您的问题以准确包含您需要的缺失内容?
  • @shepmaster 好的。下面是我的 ruby​​ 代码的结构:core |--- lib |---java_lib |----a.rb |----b.rb |----bin a.rb 内容:require 'b' class A def test ob=b.new puts ob.test end end b.rb 内容:class B def test puts "test" end end 然后,我使用 warbler 创建了上面的 jar,将 jar 放在另一个 java 项目的类路径中并尝试访问 a.test。但它说“无法加载--b”
  • 您的最后一条评论似乎与您的other question 相同,我已经在那里回答了。您能解释一下为什么需要通过--javac 选项吗?此外,由于格式不理想,您的最后一条评论作为对问题的编辑会更好。

标签: java ruby jruby warbler


【解决方案1】:

Warbler 目前不允许您传递该选项。我看到you have already opened an issue 关于这个。除此之外,最好的办法是尝试破解 the line of code that invokes jrubyc 来添加选项,看看事情是如何失败的。

我不运行 Warbler 项目,但我认为这不是 Warbler 的重点,因此您可能只想编写一个运行 jrubyc 并创建JAR 给你。

另外,您对问题的更新集中在unable to load -- b问题上,这与原始问题完全无关,我相信我已经在your other question中回答了这个问题。

【讨论】:

  • 我已经在我的 java 应用程序运行时提取了 ruby​​ jar,然后为 ScriptingContainer 配置加载路径。这已解决与“无法加载”相关的问题。但是现在有新的问题。 Ruby 代码使用使用 JNA 的本机库。所以我通常在命令行上使用 -J-cp 选项提供本机库的路径。那么在 JRuby api 中是否有任何选项可以让我做与 -J-cp 选项在命令行上所做的相同的事情。 LoadPaths 相当于 JRuby 中的 -I 选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多