如何让gem在Jruby applet中正常工作



我已经试着解决这个问题3天了,就是找不到解决办法。

所以,我已经下载了Jruby-complete-1.7.3 jar。之后,我尝试使用基本方法安装gem 'nokogiri':
java -jar jruby-complete-1.7.3 -S gem install nokogiri

另外,我有一个使用Gem-In-A-Jar方法创建的单独的jar。请注意,这个额外的jar只是试图修复下面的问题的结果。

在这两种情况下,当我通过irb进行测试时,它显示了以下内容:

require 'nokogiri'
=> true

现在,当我试图在我的web应用程序的applet中使用jruby jar时,问题出现了。具体地说,我将提到我可以加载jar本身并从我的applet与它交互,如果我不尝试访问任何gem文件(在本例中特别是nokogiri)。然而,要做到这一点,我需要在罐子上签名。

如果jar是unsigned的,它将无法工作,因为我的Ruby实例无法创建。当它被签名时,它工作正常。

问题是,一旦对jar进行了签名,我尝试调用与之前相同的命令,并得到以下错误:
require 'nokogiri'
LoadError: load error: nokogiri/nokogiri -- java.lang.RuntimeException: 
(LoadError) class "nokogiri.EncodingHandler$INVOKDER$s$1$0$get"'s signer
information does not match signer information of other classes in the same
package.

我一直在寻找相当多关于这个错误的原因和潜在的解决方案,但我无法弄清楚为什么宝石本身会导致它。在使用Gem-In-A-Jar方法时,我确实使用了相同的密钥对gem_jar进行签名。

更新:原来我错了。安装的每个gem在lib目录下都有自己的jar文件。这些jar需要用相同的密钥签名。在此之后,上述问题得到了解决。

此外,当我试图在我的web应用程序中运行它时,我得到以下消息:

classpath:/META-INF/jruby.home/lib/ruby/shared/rubygems.rb:396 warning: 
can't canonicalize loaded names due to security restrictions; disabling

我认为这是上述错误发生时抛出的异常,但我不能肯定。

我将真诚地感谢任何人可以告诉我我做错了什么,或提供建议如何解决它。如果我的问题措辞错误或没有提供足够的信息,请告诉我。

谢谢

一种解决方案是使用SDK工具从每个Jar中剥离签名,并对它们进行最新的数字签名。

相关内容

  • 没有找到相关文章

最新更新