jruby9.3.4.0NoMethodError:未定义的方法“new_ostruct_member”未找到“public”的值

eqqqjvef  于 2023-04-20  发布在  Ruby
关注(0)|答案(1)|浏览(98)

我从www.example.com更新9.3.2.0到了9.3.4.0。
现在当我想创建war文件时,我得到了一个错误。
你知道吗?

rvm use jruby-9.3.4.0
jruby -S bundle exec rake assets:clean
jruby -S bundle exec rake assets:precompile
jruby -S warble war

warble aborted!
NoMethodError: undefined method `new_ostruct_member' for No value for 'public' found
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/traits/war.rb:200:in `method_missing'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/traits/war.rb:53:in `default_webxml_config'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/traits/war.rb:27:in `before_configure'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/traits.rb:29:in `block in before_configure'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/traits.rb:29:in `each'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/traits.rb:29:in `before_configure'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/config.rb:215:in `initialize'
config/warble.rb:19:in `new'
config/warble.rb:19:in `initialize'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/task.rb:46:in `eval'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/task.rb:46:in `initialize'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/application.rb:27:in `new'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/application.rb:27:in `load_rakefile'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/application.rb:79:in `run'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/lib/warbler/application.rb:74:in `run'
/usr/share/rvm/gems/jruby-9.3.4.0/gems/warbler-2.0.5/bin/warble:11:in `<main>'
/usr/share/rvm/gems/jruby-9.3.4.0/bin/warble:25:in `load'
/usr/share/rvm/gems/jruby-9.3.4.0/bin/warble:25:in `<main>'
mzaanser

mzaanser1#

这不是一个答案,但我没有足够的声誉来发表评论。这让我找到了一个解决方案,所以这并不全是坏事!
首先是咆哮。2023年4月,一年后,我遇到了同样的问题。我使用的是JRuby 9.4.1和Warbler版本2.0.5。我可以看到一个issue on GitHub,它于2022年1月开放,现在仍然开放。Warbler现在死了吗?
问题似乎是new_ostruct_member方法在JRuby中被设置为私有的,因此一种解决方法是绕过这种保护。
将此代码粘贴到warble. rb中。

class Warbler::Traits::War::WebxmlOpenStruct
  def new_ostruct_member(name)
    send(:new_ostruct_member!, name)
  end
end
  • Credit:* JesseChavez和kovyrin on Github

我还不得不在我的Gemfile中添加Warbler,这在以前是不必要的。
我必须执行bundle exec warble才能运行它,但在它的末尾确实得到了一个.war文件。
事实证明(截至4月23日)Github版本的Warbler正在工作,它只是在等待gem版本,所以另一种方法是告诉Bundler去Github。

gem 'warbler', '2.0.5', git: 'https://github.com/jruby/warbler', branch: 'master', platforms: :jruby
  • Credit:* rcrews on Github

同样,我执行了bundle exec warble以使其运行,并在其末尾再次获得了.war文件。
rcrews也说:
手动将 *.gemspec复制到生成的war中:
mkdir WEB-INF && cp myapp.gemspec WEB-INF && zip myapp.war WEB-INF/myapp.gemspec && rm -r WEB-INF
我的项目中没有gemspec文件(我应该吗?),而且我还没有尝试部署.war,所以对此没有评论。

相关问题