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

ActiveMQ Artemis 2.17.0+自定义登录模块使用Guava缓存报错咨询

异常触发原因
  • 依赖版本不兼容:ActiveMQ Artemis 2.16.0自带的Guava版本与自定义登录模块使用的Guava版本匹配,而2.17.0、2.18.0版本调整了内置Guava组件的版本/打包结构。你用到的Guava缓存功能依赖的com.google.common.util.concurrent.internal.InternalFutureFailureAccess类属于Guava的failureaccess传递依赖,Artemis高版本内置的Guava没有包含该类,且你自定义插件打包时未将该依赖包含在内,触发类找不到异常。
  • 类加载隔离机制:Artemis对JAAS登录模块使用独立的类加载器,默认优先加载Artemis自身的公共依赖包,当自定义插件未把所有第三方依赖全量打包时,会自动使用Artemis内置的不兼容Guava版本,进一步加剧了类冲突问题。
解决方案
  • 方案1:依赖重定位(推荐)
    使用maven-shade-plugin插件将自定义插件用到的Guava、failureaccess等第三方依赖全量打进插件jar包,同时对com.google.common等Guava包路径做重命名,彻底和Artemis内置的Guava版本隔离,不会影响Artemis自身功能。参考配置:
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>3.4.1</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>
        <relocations>
          <relocation>
            <pattern>com.google.common</pattern>
            <shadedPattern>com.dallmeier.thirdparty.guava</shadedPattern>
          </relocation>
          <relocation>
            <pattern>com.google.common.util.concurrent.internal</pattern>
            <shadedPattern>com.dallmeier.thirdparty.guava.internal</shadedPattern>
          </relocation>
        </relocations>
      </configuration>
    </execution>
  </executions>
</plugin>
  • 方案2:补充缺失依赖
    直接在自定义插件的依赖中显式引入failureaccess包,打包后将该依赖jar和自定义插件jar一起放到Artemis实例的lib目录下,确保类加载器可以找到缺失的类:
<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>failureaccess</artifactId>
  <version>1.0.1</version>
</dependency>
  • 方案3:替换缓存实现
    移除Guava依赖,改用Caffeine缓存或者JDK原生的ConcurrentHashMap+过期清理逻辑实现缓存功能,从根源上避免Guava版本冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:18:03