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

部署时触发java.lang.NoSuchMethodError(ImmutableSet.builder())错误求助

解决WildFly部署时的java.lang.NoSuchMethodError问题

问题详情

部署项目时执行deploy目标失败,报错信息如下:

WFLYCTL0062: 复合操作失败并回滚,失败步骤为Operation step-1,其中jboss.undertow.deployment.default-server.default-host./服务启动异常,根源为java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.builder()Lcom/google/common/collect/ImmutableSet$Builder;

当前pom.xml依赖配置

<dependency>
    <groupId>com.google.inject</groupId>
    <artifactId>guice</artifactId>
    <version>5.0.1</version>
</dependency>
<dependency>
    <groupId>com.google.inject.extensions</groupId>
    <artifactId>guice-assistedinject</artifactId>
    <version>5.0.1</version>
</dependency>

<dependency>
    <groupId>com.google.inject.extensions</groupId>
    <artifactId>guice-multibindings</artifactId>
    <version>4.2.3</version>
</dependency>

<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>5.1.0</version>
</dependency>

<dependency>
    <groupId>com.google.inject.extensions</groupId>
    <artifactId>guice-servlet</artifactId>
    <version>5.0.1</version>
</dependency>
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

问题原因

这个错误是Guice版本不一致引发的Guava依赖冲突:

  • 项目中Guice核心及大部分扩展使用5.0.1版本,但guice-multibindings用的是4.2.3,不同版本的Guice依赖的Guava版本存在差异,低版本Guice依赖的旧版Guava中,ImmutableSet.builder()方法签名与高版本不匹配,导致类加载时找不到对应方法。
  • 另外WildFly容器本身可能自带旧版Guava,也会和项目打包的高版本Guava产生类加载冲突。

解决步骤

1. 统一Guice及其扩展版本

将所有Guice相关依赖的版本统一为5.0.1,避免版本不一致带来的依赖冲突。修改后的依赖配置如下:

<dependency>
    <groupId>com.google.inject</groupId>
    <artifactId>guice</artifactId>
    <version>5.0.1</version>
</dependency>
<dependency>
    <groupId>com.google.inject.extensions</groupId>
    <artifactId>guice-assistedinject</artifactId>
    <version>5.0.1</version>
</dependency>
<dependency>
    <groupId>com.google.inject.extensions</groupId>
    <artifactId>guice-multibindings</artifactId>
    <version>5.0.1</version>
</dependency>
<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>5.1.0</version>
</dependency>
<dependency>
    <groupId>com.google.inject.extensions</groupId>
    <artifactId>guice-servlet</artifactId>
    <version>5.0.1</version>
</dependency>
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

2. 排除容器自带的Guava(若统一版本后仍报错)

如果修改版本后还是出现相同错误,需要强制项目使用自身打包的Guava版本,排除WildFly自带的旧版Guava。

在项目src/main/webapp/WEB-INF/目录下创建jboss-deployment-structure.xml文件,内容如下:

<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="com.google.guava" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

3. 检查依赖树确认无冲突

执行Maven命令查看依赖树,确保没有旧版Guava被间接引入:

mvn dependency:tree

如果发现有其他依赖引入旧版Guava,可在对应依赖中添加排除配置。

内容的提问来源于stack exchange,提问作者Linidu Praneeth Gunathilaka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:35:41