You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grails 5.x部署至Wildfly和Websphere时出现NoSuchBeanException错误

问题分析与解决方案

核心原因

Grails 5.2.0 及以上版本基于 Micronaut 框架重构了部分核心组件,默认会启用 Micronaut 上下文环境,而传统 Java EE 容器(如 Wildfly 24、Websphere 8.5)并未适配 Micronaut 的自动初始化流程,导致依赖的 io.micronaut.context.event.ApplicationEventPublisher<io.micronaut.context.event.StartupEvent> Bean 无法被实例化。而 Grails 5.1.10 及更早版本仍以 Spring Boot 为核心,仅需移除 Tomcat 依赖即可适配 Java EE 容器。

解决方案

1. 禁用 Micronaut 上下文(推荐)

在项目的 application.yml 或 application.groovy 中添加配置,强制 Grails 使用传统 Servlet/Spring 模式运行:

grails:
  micronaut:
    enabled: false

该配置会关闭 Micronaut 的核心上下文初始化,避免引入不必要的 Micronaut 依赖组件,同时保持 Grails 原有功能正常运行。

2. 调整 Gradle 依赖排除

保留移除 Tomcat 依赖的操作,同时额外排除 Micronaut 相关的不必要依赖(需确保不影响 Grails 核心功能):

configurations {
    compileOnly {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
    }
    runtimeOnly {
        exclude group: 'io.micronaut', module: 'micronaut-context'
        exclude group: 'io.micronaut', module: 'micronaut-events'
    }
}

注意:排除依赖时需测试验证,避免误删 Grails 运行必需的组件。

3. Websphere 8.5 特殊配置

Websphere 8.5 为老旧 Java EE 7 容器,需调整类加载顺序避免类冲突:
在项目 src/main/webapp/WEB-INF 下创建 ibm-web-ext.xml 文件,添加以下配置:

<web-ext
    xmlns="http://websphere.ibm.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-ext_1_0.xsd"
    version="1.0">
    <class-loader-mode>PARENT_LAST</class-loader-mode>
</web-ext>

该配置让应用优先加载自身依赖的类,避免容器自带类与应用依赖冲突。

4. 关于是否为 Grails Bug

此问题属于 Grails 5.2+ 版本在传统 Java EE 容器下的兼容性缺陷,并非核心功能 Bug。Grails 官方在推进 Micronaut 融合时,未完全适配老旧 Java EE 容器的初始化流程。你可以在 Grails GitHub 仓库查看是否有同类问题报告,后续版本可能会修复该兼容性问题。


内容的提问来源于stack exchange,提问作者Parth Bhagat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:55:19