在Warbler中,如何通过Ruby代码访问已编译的二进制文件?

时间:2013-01-17 08:59:05

标签: ruby jar jruby warbler

我有一段Ruby代码依赖于从C构建的二进制代码。我通常通过反引号调用二进制代码。但是现在当我使用Warbler将Ruby代码打包到jar中时,我不确定我将如何访问二进制文件。

我的代码结构如下所示:

root/  
  |--bin/
       |--exec.rb   #This is the executable when I call java -jar example.jar
  |--lib/
       |--Module1.rb #This dir contains all the ruby modules my code requires
  |--ext/
       |--a.out     #A binary compiled with gcc
  |--.gemspec       #A file to guide warbler into building this structure into a jar 

我使用warble将整个结构构建到一个jar中。在Ruby中,我可以通过exec.rb中的以下语句访问我的a.out

exec = "#{File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'ext'))}/a.out}"; 
`exec`

但是当我尝试将此代码打包为jar时,我收到以下错误:

/bin/sh: file:/path/to/my/jar/example.jar!/root/ext/a.out: not found

那么,我如何访问jar中打包的可执行文件。

1 个答案:

答案 0 :(得分:0)

jar放入lib文件夹。

在代码

中需要它
require 'java'
Dir["#{File.expand_path(File.join(Rails.root, 'lib'))}/\*.jar"].each { |jar| require jar } 
# A war is treated as a directory.  If that is not successful add the lib folder to the CLASSPATH environment variable

然后它应该可以使用。

修改

也许这就是你正在寻找的https://stackoverflow.com/a/600198/643500你可以用JRuby来实现它。