我想我可能在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'目录并加入其中
使用bundler,创建一个名为'wartest'的新jruby-1.6.7.2 gemset。然后'rvm使用jruby-1.6.7.2@wartest'
安装warbler和bundler:
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: 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 require at org/jruby/RubyKernel.java:1027 require at 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 (root) at jar:file:/Users/jstokes/Local/Repositories/wartest/wartest.jar!/gems/bson-1.8.0-java/lib/bson.rb:53 require at org/jruby/RubyKernel.java:1027 (root) at 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 require at 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 load at org/jruby/RubyKernel.java:1046 (root) at file:/Users/jstokes/Local/Repositories/wartest/wartest.jar!/wartest/bin/main.rb:1 require at org/jruby/RubyKernel.java:1027 (root) at file:/Users/jstokes/Local/Repositories/wartest/wartest.jar!/META-INF/main.rb:1 (root) at file:/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(和mongo,这取决于bson)之外,我没有看到任何其他宝石。