Ubuntu20.04编译Apache Ranger2.4.0遇Maven打包错误求助
先单独验证distro模块的构建结果
执行mvn -pl distro -DskipTests clean package单独构建distro模块,然后用jar tf /home/swapnendu_b/apache-ranger-2.4.0/distro/target/ranger-distro-2.4.0.jar | grep pom.properties命令检查目标jar包中是否存在缺失的pom.properties文件。如果文件确实不存在,说明distro模块的构建配置有问题,需要优先修复这个模块。检查distro模块的maven-jar-plugin配置
打开distro/pom.xml,找到maven-jar-plugin的配置段,确保它保留了自动生成pom元文件的默认行为。默认情况下maven-jar-plugin会把pom.properties和pom.xml写入jar包的META-INF/maven目录,如果配置中覆盖了<archive>节点但未开启相关选项,可能导致文件缺失。参考配置如下:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <addDefaultImplementationEntries>true</addDefaultImplementationEntries> <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries> </manifest> </archive> </configuration> </plugin>修正schema-registry-plugin的assembly配置
打开plugins/schema-registry-plugin/pom.xml,检查maven-assembly-plugin的配置:- 确认依赖的distro jar包版本使用
${project.version}变量,避免硬编码版本号导致匹配错误; - 查看对应的assembly descriptor文件(通常是
src/main/assembly/assembly.xml),检查是否有过滤规则误删除了META-INF目录下的pom相关文件。
- 确认依赖的distro jar包版本使用
清理缓存并针对性构建
先删除本地Maven仓库中Ranger相关的缓存文件:rm -rf ~/.m2/repository/org/apache/ranger,然后执行mvn clean install -DskipTests -pl distro,schema-registry-plugin -am,强制重新构建依赖模块和目标插件模块,避免旧缓存干扰。尝试降级maven-assembly-plugin版本
新版本的assembly插件可能和Ranger 2.4.0的构建逻辑存在兼容性问题,尝试将根pom.xml中的maven-assembly-plugin版本降级到3.3.0(Ranger 2.4.0原生适配的版本范围),再重新执行完整构建命令。
内容的提问来源于stack exchange,提问作者Vikas Kumar

