6

我想我可能在 Warbler 中发现了一个错误,但我想在这里发布这个问题,以防我做错了什么。简而言之,任何尝试将需要“bson”gem 的 jruby 应用程序打包成带有 warbler 的 .jar 文件的尝试都会失败。这是我每次得到的错误:

LoadError: no such file to load -- jar:file:/Users/jstokes/Local/Repositories/wartest/wartest.jar!/gems/bson-1.8.0-java/lib/../ext/java/jar/mongo-2.6.5 ...

这是在 OS X 或 Linux 上重现问题的一组非常简单的步骤:

制作一个 'wartest' 目录并 cd 进入它

使用 bundler,制作一个名为 'wartest' 的新 jruby-1.6.7.2 gemset。然后做'rvm使用jruby-1.6.7.2@wartest'

安装莺和捆绑器:

jruby --1.9 -S gem install warbler
jruby --1.9 -S gem install bundler

只是为了确认它有效:

which warble
#=> /Users/jstokes/.rvm/gems/jruby-1.6.7.2@wartest/bin/warble

现在创建以下两行 Gemfile:

#Gemfile
source 'http://rubygems.org'
gem 'bson'

现在'捆绑安装'

现在创建一个 bin 目录并创建文件 bin/main.rb。然后粘贴以下内容:

#bin/main.rb
require 'bson'
puts 'It worked!'

此时,我们已准备好创建 jar 文件。也一样

jruby --1.9 -S warble jar
#=> rm -f wartest.jar
#=> Creating wartest.jar

现在是关键时刻:

java -jar wartest.jar
#=> It worked!

所以有什么问题?问题是,如果您更改为另一个 gemset,或使用系统 ruby​​,它会爆炸。观察:

rvm use system
#=> Now using system ruby.
java -jar wartest.jar
LoadError:没有要加载的文件--jar:file:/Users/jstokes/Local/Repositories/wartest/wartest.jar!/gems/bson-1.8.0-java/lib/../ext/java/jar/ mongo-2.6.5
  需要在 org/jruby/RubyKernel.java:1027
  需要在 jar:file:/var/folders/xr/nmvhn6x566v6xkw9l7pgpkj40000gn/T/jruby5567740032767770706extract/jruby-stdlib-1.7.1.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/custom_require.rb: 36
   (根)在 jar:file:/Users/jstokes/Local/Repositories/wartest/wartest.jar!/gems/bson-1.8.0-java/lib/bson.rb:53
  需要在 org/jruby/RubyKernel.java:1027
   (根)在 jar:file:/var/folders/xr/nmvhn6x566v6xkw9l7pgpkj40000gn/T/jruby5567740032767770706extract/jruby-stdlib-1.7.1.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/custom_require。 RB:1
  需要在 jar:file:/var/folders/xr/nmvhn6x566v6xkw9l7pgpkj40000gn/T/jruby5567740032767770706extract/jruby-stdlib-1.7.1.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/custom_require.rb: 60
     在 org/jruby/RubyKernel.java:1046 加载
   (根)在文件:/Users/jstokes/Local/Repositories/wartest/wartest.jar!/wartest/bin/main.rb:1
  需要在 org/jruby/RubyKernel.java:1027
   (根)在文件:/Users/jstokes/Local/Repositories/wartest/wartest.jar!/META-INF/main.rb:1
   (根)在文件:/Users/jstokes/Local/Repositories/wartest/wartest.jar!/META-INF/main.rb:1

如果我回去 jar xf wartest.jar,并进入 gems/bson-1.8.0-java 目录,mongo-2.6.5.jar 文件存在并且在正确的位置。但由于某种疯狂的原因,它就是找不到。在 Ubuntu 和 OS X 上每次都会发生这种情况。如果有人知道我做错了什么,请告诉我。否则我会提交错误报告。

如果我提交错误报告,这是谁的错误?我认为这是一个莺虫错误,但除了 bson(和依赖于 bson 的 mongo)之外,我没有看到它与任何其他 gem 一起出现。

4

0 回答 0