如何通过Maven与Nexus仅部署RPM包,跳过JAR包的部署阶段?
解决maven-rpm-plugin部署时仅跳过JAR包上传的问题
我刚好处理过类似的场景,核心需求很明确:保留JAR打包步骤(因为RPM生成依赖它),但在deploy阶段只上传RPM包,跳过默认的JAR包上传。下面给你两种可靠的实现方式:
方案一:在pom.xml中永久配置
这种方式适合固定生产环境的构建规则,直接修改项目的pom.xml即可:
1. 禁用默认的JAR包部署插件
Maven默认的maven-deploy-plugin负责上传主构件(也就是你的JAR包),我们可以通过配置让它跳过执行,同时保留rpm-maven-plugin的部署逻辑:
<build> <plugins> <!-- 跳过默认JAR包的deploy上传 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <version>3.1.1</version> <configuration> <!-- 这个参数会让插件完全跳过deploy动作 --> <skip>true</skip> </configuration> </plugin> <!-- 确保rpm-maven-plugin在deploy阶段正常上传RPM --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>rpm-maven-plugin</artifactId> <version>2.2.0</version> <executions> <execution> <!-- 绑定到deploy阶段 --> <phase>deploy</phase> <goals> <goal>deploy</goal> </goals> </execution> </executions> <!-- 这里保留你原有的RPM配置(比如spec模板、依赖等) --> </plugin> </plugins> </build>
关键说明:
maven-deploy-plugin的<skip>true</skip>只会跳过它自己的deploy动作,不会影响rpm-maven-plugin的deploy目标,因为两者是独立的插件。- 打包JAR的步骤(
package阶段)完全不受影响,RPM生成所需的JAR文件会正常生成。
方案二:通过命令行参数临时跳过
如果不想修改pom.xml,或者只在特定构建场景(比如生产环境部署)中跳过JAR上传,可以在执行deploy命令时添加参数:
mvn deploy -Dmaven.deploy.skip=true
关键说明:
-Dmaven.deploy.skip=true是maven-deploy-plugin的内置参数,只会禁用它的上传逻辑,rpm-maven-plugin的deploy动作依然会执行。- 这种方式灵活,适合需要在不同环境切换构建规则的场景。
验证方法
执行完deploy后,可以登录Nexus仓库检查:
- 对应项目的仓库中,只有RPM包被上传,没有JAR包的痕迹。
- 本地
target目录下,JAR包和RPM包都正常生成(确保RPM依赖的JAR存在)。
内容的提问来源于stack exchange,提问作者okno
相关产品推荐
相关产品推荐

