Ubuntu 18下Maven构建时rpm-maven-plugin报RPM默认vendor返回3错误求解
问题根因
你遇到的报错和是否安装rpm包无关——很多人按照旧帖子的指引装完Ubuntu仓库提供的rpm包还是踩这个坑,核心原因是Ubuntu源内的rpm包做了Debian系适配裁剪,缺失了_host_vendor这个默认宏定义。
报错里插件执行的rpm -E '%{_host_vendor}'命令,本质是尝试读取系统rpm宏定义获取发行商标识,但因为宏未定义,rpm直接返回退出码3,你当前使用的rpm-maven-plugin 2.0版本没有做这类异常的兼容处理,直接抛出构建失败。
可落地的解决方案
按操作成本从低到高排列:
方案1:补全全局rpm宏定义(1分钟搞定,适合临时本地构建)
- 新建或编辑系统级rpm宏配置文件:
sudo vim /etc/rpm/macros - 文件不存在就新建,在文件末尾新增一行固定宏定义:
%_host_vendor unknown-linux-gnu - 保存退出后手动验证命令是否生效:
rpm -E '%{_host_vendor}'
如果命令正常输出unknown-linux-gnu、退出码为0,就可以重新执行mvn clean install完成构建。
方案2:在Maven插件配置中硬编码vendor值(不依赖系统环境,适合团队/流水线构建)
如果不想修改全局系统配置,可直接在项目pom.xml的rpm-maven-plugin配置块中,手动指定vendor参数,完全绕开插件自动查询系统宏的逻辑:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>rpm-maven-plugin</artifactId> <version>2.0</version> <configuration> <!-- 新增这一行配置,硬编码vendor值即可绕开系统查询 --> <vendor>unknown-linux-gnu</vendor> <!-- 保留项目原有的所有插件配置即可,不需要做其他改动 --> </configuration> </plugin>
这个方案的优势是不依赖构建机器的环境配置,换任何机器、任何流水线执行构建都不会触发同类报错。
方案3:升级rpm-maven-plugin版本(长期维护方案)
你当前使用的2.0版本发布时间很早,本身没有做Debian/Ubuntu系统的兼容处理。后续插件版本已经修复了这类系统宏缺失的兼容问题,可直接将插件版本升级到2.1.5及以上的稳定版本,无需额外配置即可正常完成构建。
常见避坑提示
- 该问题和build-essential、rpm-build等额外编译依赖包无关,安装这类包无法解决宏缺失的问题
- 不要使用
sudo执行Maven构建命令,否则会导致生成的rpm文件权限异常,同时sudo环境下的rpm宏查找路径和普通用户不一致,可能触发新的报错 - 如果使用容器化流水线构建,需要提前在镜像层做好rpm宏配置或插件参数配置,否则容器内构建会复现同样的报错
内容的提问来源于stack exchange,提问作者Autumn
相关产品推荐
相关产品推荐

