Как заставить гем работать должным образом в апплете Jruby?

Я пытался решить эту проблему в течение 3 дней, и я просто не могу найти решение.

Итак, я скачал банку Jruby-complete-1.7.3. После чего я попытался установить камень 'nokogiri', используя основной метод:

java -jar jruby-complete-1.7.3 -S gem install nokogiri

Кроме того, у меня есть отдельная банка, которая была создана с использованием метода Gem-In-A-Jar. Обратите внимание, что эта дополнительная банка является только результатом попытки решить проблему ниже.

В обоих случаях, когда я проверяю его через irb, он показывает мне следующее:

require 'nokogiri'
=> true

Теперь проблема возникает, когда я пытаюсь использовать jruby jar в апплете в моем веб-приложении. Чтобы быть точным, я упомяну, что я могу загрузить сам jar и взаимодействовать с ним из моего апплета, если я не пытаюсь получить доступ к каким-либо файлам gem (особенно nokogiri в этом случае). Однако, чтобы это произошло, я должен подписать банку.

Если jar не подписан, он не работает, так как мой экземпляр 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.

ОБНОВЛЕНИЕ: Оказывается, я был неправ. Каждый установленный гем поставляется со своим собственным файлом jar в каталоге lib. Эти банки должны быть подписаны одним и тем же ключом. После этого вышеуказанная проблема была решена. Тем не менее, один ниже остается.

Кроме того, когда я пытаюсь запустить его в своем веб-приложении, я получаю следующее сообщение:

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

Я предполагаю, что это исключение, возникающее при возникновении указанной выше ошибки, но я не могу сказать наверняка.

Я был бы искренне признателен всем, кто может рассказать мне, что я сделал не так, или дать советы о том, как это исправить. Если я неправильно сформулировал вопрос или не предоставил достаточно информации, дайте мне знать.

Спасибо

1 ответ

Решение

Одним из решений является использование инструментов SDK для удаления подписей с каждого Jar-файла и их цифровой подписи.

Другие вопросы по тегам