我对编程很陌生,并且一直在尝试遵循Team Treehouse教程。然而,在我自己的项目上工作时,我一直在用JRuby和Neo4j构建一个应用程序。到目前为止,我已经设法解决了一些差异,但现在似乎陷入困境。我刚刚安装了Neo4j-Devise宝石,一切都运行正常,但现在每当我尝试启动服务器时,我似乎都会收到此错误......或者做任何有用的事情:
LoadError: load error: jopenssl/load -- java.lang.VerifyError: class org.bouncycastle.asn1.ASN1Primitive overrides final method equals.(Ljava/lang/Object;)Z
require at org/jruby/RubyKernel.java:1083
(root) at C:/jruby-1.7.9/lib/ruby/gems/shared/gems/jruby-openssl-0.9.4/lib/jruby-openssl.rb:5
require at org/jruby/RubyKernel.java:1083
(root) at C:/jruby-1.7.9/lib/ruby/gems/shared/gems/bundler-1.3.5/lib/bundler/runtime.rb:1
each at org/jruby/RubyArray.java:1613
require at C:/jruby-1.7.9/lib/ruby/gems/shared/gems/bundler-1.3.5/lib/bundler/runtime.rb:72
each at org/jruby/RubyArray.java:1613
require at C:/jruby-1.7.9/lib/ruby/gems/shared/gems/bundler-1.3.5/lib/bundler/runtime.rb:70
require at C:/jruby-1.7.9/lib/ruby/gems/shared/gems/bundler-1.3.5/lib/bundler/runtime.rb:59
require at C:/jruby-1.7.9/lib/ruby/gems/shared/gems/bundler-1.3.5/lib/bundler.rb:132
require at org/jruby/RubyKernel.java:1083
(root) at C:/Sites/Knock4/config/application.rb:14
tap at org/jruby/RubyKernel.java:1891
(root) at C:/jruby-1.7.9/lib/ruby/gems/shared/gems/railties-3.2.16/lib/rails/commands.rb:1
require at org/jruby/RubyKernel.java:1083
(root) at script/rails:6
我已经阅读了其他一些页面,其中提到类似的错误可能是由于Bouncycastle版本的差异造成的,但我已经尝试过更改它们(至少我认为我有,也许我一直在做错!)我一直都有同样的错误。
非常感谢任何帮助!
gem文件如下:
source 'https://rubygems.org'
gem 'rails', '3.2.16'
gem 'jruby-openssl'
gem 'devise', '2.2.7'
gem 'devise-neo4j', :git => 'git://github.com/cfitz/devise-neo4j.git', :branch => 'devise2'
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
gem 'therubyrhino'
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
group :development, :test do
gem "rspec-rails"
end
gem "neo4j", ">= 2.2.0"
gem 'neo4j-admin'
答案 0 :(得分:2)
neo4j-admin-0.2.0-java
宝石似乎包括lib/neo4j-admin/jars/bcprov-jdk16-140.jar
。解包该JAR表明包含了bouncycastle类。
查看docs for ASN1Primitive,我们可以看到它继承自ASN1Object
。在上面的JAR中包含的ASN1Object上运行javap
,我们可以看到equals
定义为什么(删除了额外的行):
$ javap ASN1Object.class | grep equals
public final boolean equals(java.lang.Object);
此数据与此related question相关联。查看JAR根目录下的MANIFEST.MF
文件,它说
Implementation-Version: 1.40.0
所以JRuby可能包括更新版本的bouncycastle,你有一个提供旧版本的宝石;欢迎来到DLL地狱:-)。我不确定这里最好的解决方案。您可以将bcprov
JAR删除为快速黑客,但谁知道可能会做什么。您应该检查是否有更新版本的neo4j宝石可以解决这个问题。如果没有,你应该提交一个bug,以便他们知道(如果还没有)。
修改强>
这是the bug report。它看起来已经有很长一段时间了。
编辑2
当然,如果您不需要neo4j-admin
gem,您可以将其从Gemfile中删除并继续运输。