Jruby试图加载当地的红宝石而不是包装的宝石

时间:2016-06-23 18:19:54

标签: java ruby jruby

我在我的犹豫不决的罐子里看到一个奇怪的问题,我确定它是由于一些配置,但我无法弄清楚是什么。我所看到的行为是当我的jruby jar加载一个宝石时,它在我当地的红宝石环境中寻找它而不是在罐子里面。如果我将我的罐子移动到没有红宝石环境的系统,那么它会使用包装在罐子里的宝石。

这是我的启动rb文件。

require 'rubygems'
app_jar_root = File.expand_path(File.join(File.dirname(__FILE__), ".."))

Dir["#{app_jar_root}/Project/**/*/"].each do |foldername|
  $LOAD_PATH.unshift foldername[-1] == '/' ? foldername[0..-2] : foldername
end


# All support libraries required to be included
[
  'java',
  'yaml'
].each do |require_name|
  require require_name
end

# All java imported namespaces
[
   # 'java.sql.DriverManager'
].each do |namespace|
  java_import namespace
end

# base app directory requires
Dir["#{app_jar_root}/Project/app/**/*.rb"].reject do |filename|
  %w|file_to_exclude1.rb file_to_exclude2|.include? File.basename(filename)
end.each do |filename|
  require File.basename(filename)
end

# Debugger.start

我也可以发布我的warble.rb,如果它有用,但我假设问题是boot.rb中的一些配置。

1 个答案:

答案 0 :(得分:0)

原来问题是我的jruby jar引用了本地GEM_PATHGEM_HOME变量(如果它们存在于系统中)。要解决这个问题,我必须通过在boot.rb文件中重新分配变量来将变量重定向到jar内部。

以下是我如何实现此目标的示例,其中app_jar_root是jar中app文件夹的根目录。

ENV['GEM_HOME'] = "#{app_jar_root}/gems"
ENV['GEM_PATH'] = "#{app_jar_root}/gems"