java - JRuby warbler "compiled"命令在 Tomcat 中产生 ClassCastException

标签 java tomcat jruby warbler

我正在使用 warbler 将我的 JRuby 网络应用程序打包到一个 war 文件中,并将其部署到 Apache Tomcat 8.0.21。这很好用。但是,我正在尝试使用“已编译”命令来运行 warbler:

warble compiled war

当我部署生成的 war 文件时,出现以下异常:

org.jruby.rack.RackInitializationException: load error: /apache-tomcat-8.0.21/webapps/ROOT/WEB-INF/config/boot -- java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.invoke.SwitchPoint
    from org/jruby/RubyKernel.java:1054:in `require'
    from jar:file:/apache-tomcat-8.0.21/webapps/ROOT/WEB-INF/lib/jruby-stdlib-1.7.4.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/custom_require.rb:36:in `require'
    from file:/apache-tomcat-8.0.21/webapps/ROOT/WEB-INF/lib/jruby-rack-1.1.13.3.jar!/jruby/rack/rails/environment3.rb:23:in `load_environment'
    from file:/apache-tomcat-8.0.21/webapps/ROOT/WEB-INF/lib/jruby-rack-1.1.13.3.jar!/jruby/rack/rails_booter.rb:79:in `load_environment'
    from <script>:1:in `(root)'

    at org.jruby.rack.RackInitializationException.wrap(RackInitializationException.java:29)
    at org.jruby.rack.RackApplicationFactoryDecorator.init(RackApplicationFactoryDecorator.java:98)
    at org.jruby.rack.RackServletContextListener.contextInitialized(RackServletContextListener.java:50)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4728)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5166)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:940)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1738)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)
Caused by: org.jruby.exceptions.RaiseException: (LoadError) load error: /apache-tomcat-8.0.21/webapps/ROOT/WEB-INF/config/boot -- java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.invoke.SwitchPoint
    at org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1054)
    at RUBY.require(jar:file:/apache-tomcat-8.0.21/webapps/ROOT/WEB-INF/lib/jruby-stdlib-1.7.4.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/custom_require.rb:36)
    at RUBY.load_environment(file:/apache-tomcat-8.0.21/webapps/ROOT/WEB-INF/lib/jruby-rack-1.1.13.3.jar!/jruby/rack/rails/environment3.rb:23)
    at RUBY.load_environment(file:/apache-tomcat-8.0.21/webapps/ROOT/WEB-INF/lib/jruby-rack-1.1.13.3.jar!/jruby/rack/rails_booter.rb:79)
    at RUBY.(root)(<script>:1)

为什么编译版本会产生异常?任何帮助表示赞赏。谢谢!

最佳答案

我认为这是一个与 warbler gem 相关的错误。我刚刚将我的 JRuby 版本从 1.7.4 升级到 1.7.5,并将 warbler 从 1.4.3 升级到 1.4.8,这解决了这个问题。

关于java - JRuby warbler "compiled"命令在 Tomcat 中产生 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31418763/

相关文章:

tomcat - 不可恢复的 key 异常

version - 如何检查哪个 JRuby 版本与哪个 Java 版本兼容?

java - Jruby on Rails java 对象序列化

java - 什么是 NullPointerException,我该如何解决?

java - 无法执行存储过程 (jdbc)。 'noAccessToProcedureBodies=true'

java - JTextField setDocument 覆盖文本

java - 自定义 Tomcat JNDI 数据源

java - 将 Ruby 库(permailer)打包为 .jar(使用 JRuby)

java - 类的构造函数不创建类

java - 在构造函数中捕获异常