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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 05:45:04