【问题标题】:I'm getting a NoSuchMethodError when trying to use Guice AOP尝试使用 Guice AOP 时出现 NoSuchMethodError
【发布时间】:2025-12-05 01:25:01
【问题描述】:

我正在尝试使用 Guice AOP 进行分析:

@Override
protected void configure()
{
    this.bindInterceptor(Matchers.any(), Matchers.annotatedWith(Profiled.class), new ProfileInterceptor());
}

它在本地运行良好,但是当我尝试部署到 Websphere Application Server 时,我得到一个

java.lang.NoSuchMethodError: cnphi/base/profiling/ProfilingModule.bindInterceptor(Lcom/google/inject/matcher/Matcher;Lcom/google/inject/matcher/Matcher;[Lorg/aopalliance/intercept/MethodInterceptor;)

知道这里发生了什么吗?

【问题讨论】:

  • Guice 的 no-aop 版本可能在某个地方的类路径中。
  • 是的,这就是我的猜测。知道如何强制它使用我想要的版本吗?
  • 你应该分析你的依赖树。对于 maven,即: mvn dependency:tree

标签: websphere aop guice


【解决方案1】:

当我从旧的 Oracle (javax) 更新 Transaction API 依赖项时,我遇到了同样的错误:

    <dependency>
        <groupId>javax.transaction</groupId>
        <artifactId>javax.transaction-api</artifactId>
        <version>1.3</version>
    </dependency>

到当前的 Eclipse/Jakarta 一个,最新的 1.3.x:

    <dependency>
        <groupId>jakarta.transaction</groupId>
        <artifactId>jakarta.transaction-api</artifactId>
        <version>1.3.3</version> <!-- causes Guice NoSuchMethodError -->
    </dependency>

修复是“降级”并改用 1.3.1,它更接近 1.3 javax 版本:

    <dependency>
        <groupId>jakarta.transaction</groupId>
        <artifactId>jakarta.transaction-api</artifactId>
        <version>1.3.1</version>
    </dependency>

【讨论】:

    最近更新 更多