Grails 4 war 部署到 Tomcat 失败,没有这样的方法:reactor.core.publisher.Mono.from(Publisher)Mono/invokeStatic

问题描述

类似问题:Grails got error when war file deployed to Heroku (Factory method 'requestMappingHandlerAdapter' threw exception)

但是我在将 grails 4.0.11 生成的 war 文件部署到 Tomcat(v8.5.39) 时遇到了这个问题:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]: Factory method 'requestMappingHandlerAdapter' threw exception; nested exception is java.lang.BootstrapMethodError: java.lang.IllegalAccessError: no such method: reactor.core.publisher.Mono.from(Publisher)Mono/invokeStatic
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622)
        ... 33 more
Caused by: java.lang.BootstrapMethodError: java.lang.IllegalAccessError: no such method: reactor.core.publisher.Mono.from(Publisher)Mono/invokeStatic
        at org.springframework.core.ReactiveAdapterRegistry$ReactorRegistrar.registeradapters(ReactiveAdapterRegistry.java:194)
        at org.springframework.core.ReactiveAdapterRegistry.<init>(ReactiveAdapterRegistry.java:70)
        at org.springframework.core.ReactiveAdapterRegistry.getSharedInstance(ReactiveAdapterRegistry.java:179)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.<init>(RequestMappingHandlerAdapter.java:169)

我正在从 grails 3.3.11 升级项目。

WAR 正在使用 ./gradlew bootWar 构建。

本地开发环境没有问题。

我的 build.gradle 中的依赖项:

    compile 'org.springframework.boot:spring-boot-starter-logging'
    compile 'org.springframework.boot:spring-boot-autoconfigure'
    compile 'org.grails:grails-core'
    compile 'org.springframework.boot:spring-boot-starter-actuator'
    provided 'org.springframework.boot:spring-boot-starter-tomcat'
    compile 'org.grails:grails-web-boot'
    compile 'org.grails:grails-logging'
    compile 'org.grails:grails-plugin-rest'
    compile 'org.grails:grails-plugin-databinding'
    compile 'org.grails:grails-plugin-i18n'
    compile 'org.grails:grails-plugin-services'
    compile 'org.grails:grails-plugin-url-mappings'
    compile 'org.grails:grails-plugin-interceptors'
    compile 'org.grails.plugins:cache'
    compile 'org.grails.plugins:scaffolding'
    compile 'org.grails.plugins:gsp'
    compile 'org.grails:grails-web-fileupload'
    compile 'org.apache.tomcat:tomcat-jdbc'
    runtime "com.bertramlabs.plugins:asset-pipeline-grails:3.2.4"
    compile "org.grails.plugins:async"
    compile 'com.google.code.gson:gson:2.8.5'
    testCompile 'org.grails:grails-gorm-testing-support'
    testCompile 'org.grails:grails-web-testing-support'
    testRuntime 'org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1'
    testRuntime 'net.sourceforge.htmlunit:htmlunit:2.18'
    agent "org.springframework:springloaded:1.2.8.RELEASE"
    runtimeOnly "io.methvin:directory-watcher:0.9.6"
    compileOnly "io.micronaut:micronaut-inject-groovy"
    compile 'org.postgresql:postgresql:42.2.20'
    compile 'org.codehaus.groovy:groovy-dateutil:2.5.14'
    compile 'org.grails.plugins:hibernate5'
    compile 'org.hibernate:hibernate-core:5.4.18.Final'
    compile 'org.hibernate:hibernate-ehcache:5.4.18.Final'
    compile 'org.grails.plugins:spring-security-core:4.0.3'
    compile 'org.grails.plugins:spring-security-acl:4.0.0.M2'
    compile 'org.grails.plugins:postgresql-extensions:7.0.0'
    compile 'org.springframework.security.extensions:spring-security-saml2-core:1.0.3.RELEASE'
    compile 'org.grails.plugins:quartz:2.0.13'
    compile("org.quartz-scheduler:quartz:2.2.3") {
        exclude group: 'slf4j-api',module: 'c3p0'
    }
    compile 'com.google.api-ads:ads-lib:4.2.0'
    compile 'com.google.api-ads:adwords-axis:4.2.0'
    compile "com.googlecode.java-diff-utils:diffutils:1.2.1"
    compile 'net.coobird:thumbnailator:0.4.8'
    compile 'org.apache.ant:ant:1.9.4'
    compile 'commons-io:commons-io:2.5'
    compile 'com.cloudbees.thirdparty:zendesk-java-client:0.6.2'
    compile 'org.yaml:snakeyaml:1.23'
    compile 'cglib:cglib:2.2.2'
    compile 'org.apache.httpcomponents:httpclient:4.5'
    compile 'org.apache.pdfBox:pdfBox:1.8.9'
    compile 'commons-validator:commons-validator:1.6'
    compile 'io.fastjson:boon:0.33'
    compile 'com.thoughtworks.xstream:xstream:1.4.8'
    compile 'com.amazonaws:aws-java-sdk-s3:1.11.423'
    compile 'com.amazonaws:aws-java-sdk-core:1.11.423'
    compile 'com.amazonaws:aws-java-sdk-lambda:1.11.423'
    compile 'com.jcraft:jsch:0.1.53'
    compile 'com.opencsv:opencsv:5.2'
    compile project(':common')
    compile project(':query')
    compile project(':query-generator')
    compile 'org.grails.plugins:audit-logging:4.0.3'
    compile 'bouncycastle:bcprov-jdk14:138'
    compile 'org.grails.plugins:csv:1.0'
    compile 'org.grails.plugins:cookie:2.0.5'
    runtime 'org.grails.plugins:grails-console:2.1.1'
    compile 'org.grails.plugins:database-migration:3.1.0'
    compile 'org.liquibase:liquibase-core:3.10.1'
    compile 'org.grails.plugins:qrcode:0.9'
    compile 'org.grails.plugins:mail:3.0.0'
    compile 'org.grails.plugins:grails-executor:0.4'
    compile 'org.reflections:reflections:0.9.10'
    compile 'org.grails.plugins:sentry:11.7.25'
    runtime 'org.jolokia:jolokia-core'
    testRuntime 'net.sourceforge.htmlunit:htmlunit:2.18'
    testRuntime 'org.seleniumhq.selenium:selenium-support:2.53.1'
    testCompile 'org.seleniumhq.selenium:selenium-chrome-driver:2.53.1'
    compile 'org.grails.plugins:views-json:2.0.4'
    testCompile 'org.grails.plugins:greenmail:2.0.0.RC3'
    compile (group: 'com.nimbusds',name: 'nimbus-jose-jwt',version: '8.10')
        { exclude group: 'org.ow2.asm' }
    testCompile group: 'org.skyscreamer',name: 'jsonassert',version: '1.5.0'
    compile 'org.codehaus.gpars:gpars:1.1.0'
    testCompile 'org.grails:grails-test-mixins:3.3.0'
    compile 'com.syncron.amazonaws:simba-athena-jdbc-driver:2.0.2'
    testCompile 'org.mock-server:mockserver-netty:5.11.2'

解决方法

我进行了依赖项扫描并搜索了任何与 reactive 相关的内容。

它发现 reactive-streams 是 micronaut 的依赖项。

+--- org.grails:grails-core -> 4.0.10
|    +--- org.codehaus.groovy:groovy:2.5.14
|    +--- org.slf4j:slf4j-api:1.7.30
|    +--- org.slf4j:jcl-over-slf4j:1.7.30
|    |    \--- org.slf4j:slf4j-api:1.7.30
|    +--- io.micronaut:micronaut-inject:1.3.7
|    |    +--- org.slf4j:slf4j-api:1.7.26 -> 1.7.30
|    |    +--- javax.annotation:javax.annotation-api:1.3.2
|    |    +--- javax.inject:javax.inject:1
|    |    +--- io.micronaut:micronaut-core:1.3.7
|    |    |    +--- org.slf4j:slf4j-api:1.7.26 -> 1.7.30
|    |    |    +--- org.reactivestreams:reactive-streams:1.0.3

排除它解决了问题,但我不知道它可能导致什么后果。

configurations.all {
    exclude group: 'org.reactivestreams',module: 'reactive-streams'
}

war 时部署到 Tomcat 工作正常,并且该应用程序目前看起来很稳定。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...