我从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>'
1条答案
按热度按时间mzaanser1#
这不是一个答案,但我没有足够的声誉来发表评论。这让我找到了一个解决方案,所以这并不全是坏事!
首先是咆哮。2023年4月,一年后,我遇到了同样的问题。我使用的是JRuby 9.4.1和Warbler版本2.0.5。我可以看到一个issue on GitHub,它于2022年1月开放,现在仍然开放。Warbler现在死了吗?
问题似乎是
new_ostruct_member
方法在JRuby中被设置为私有的,因此一种解决方法是绕过这种保护。将此代码粘贴到warble. rb中。
我还不得不在我的Gemfile中添加Warbler,这在以前是不必要的。
我必须执行
bundle exec warble
才能运行它,但在它的末尾确实得到了一个.war文件。事实证明(截至4月23日)Github版本的Warbler正在工作,它只是在等待gem版本,所以另一种方法是告诉Bundler去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,所以对此没有评论。