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

Apache Ranger 2.6 Maven构建Enunciate编译错误解决问询

解决Apache Ranger 2.6构建Enunciate编译失败问题

一、具体修复方案

1. 处理org.apache.ranger.credentialapi.CredentialReader类重复问题

  • 执行mvn dependency:tree查看依赖树,定位重复引入该类的依赖包,在对应模块的pom.xml中用<exclusions>标签排除重复依赖。
  • 如果是Enunciate代码生成插件重复生成该类,调整enunciate.xml或pom中的Enunciate插件配置,将该类从生成逻辑中排除。

2. 解决com.google.common.annotations.VisibleForTesting找不到的问题

  • 确认guava版本:该注解在guava兼容Java8的稳定版本(如28.2-jre)中仍保留在com.google.common.annotations包,部分新版本存在包路径迁移情况。
  • 显式锁定guava版本:在父pom或当前模块pom中添加依赖,强制使用兼容版本:
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>28.2-jre</version>
        <scope>compile</scope>
    </dependency>
    
  • 给Enunciate插件添加guava依赖:若插件类加载器无法识别项目依赖的guava,在插件配置中显式引入:
    <plugin>
        <groupId>org.codehaus.enunciate</groupId>
        <artifactId>maven-enunciate-plugin</artifactId>
        <version>你当前使用的Enunciate版本</version>
        <dependencies>
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>28.2-jre</version>
            </dependency>
        </dependencies>
        <!-- 其他原有配置 -->
    </plugin>
    
  • 排查依赖冲突:用mvn dependency:tree找出引入低版本guava的依赖,通过<exclusions>排除,避免maven自动选择无注解的低版本。

3. 分步构建定位问题

拆分构建命令,先执行mvn clean compile确认基础编译正常,再执行mvn package install,便于快速定位问题环节。若临时需要跳过Enunciate检查,可添加参数-Dmaven.enunciate.skip=true,但此为权宜之计,建议优先修复根源问题。

二、问题原因解析

  • 依赖版本冲突:项目中同时引入多个版本guava时,maven依赖调解机制可能选择不包含目标注解的低版本,导致编译时找不到符号。
  • Enunciate类加载隔离:Enunciate插件运行时使用独立类加载器,未正确加载项目依赖的guava包,无法识别注解类。
  • 注解包路径迁移:guava不同版本对VisibleForTesting的包路径做过调整,若项目代码引用旧路径但依赖新版本guava,会出现找不到符号的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 21:34:51