如何在GitLab CI/CD流水线中将Maven多模块项目按父项目名统一发布到Nexus
解决Maven多模块项目统一发布RPM到Nexus方案
问题原因
默认执行Maven deploy命令时会遍历所有子模块,将每个模块的构建产物单独发布到Nexus,你当前的子模块都配置了独立的RPM打包逻辑,因此会出现每个子模块单独发布RPM的情况。按照以下步骤调整即可实现父项目名下统一发布包含所有子模块资源的RPM包。
步骤1:修正现有配置的笔误
你当前的pom配置存在坐标不一致的问题,需要先修正避免识别错误:
- 子模块pom中parent节点的artifactId要和主pom一致,改为
Main_prj_name_2.11 - 主pom和子模块的groupId要统一,要么都用
com.abc.zyx要么都用com.abc.xyz
步骤2:禁用子模块的单独RPM发布逻辑
在每个子模块的pom.xml中,给负责打RPM的插件添加跳过配置,以常用的rpm-maven-plugin为例:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>rpm-maven-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin>
如果使用其他RPM打包插件,同理添加跳过配置即可。
步骤3:父项目配置统一RPM打包逻辑
在主pom.xml中新增RPM打包配置,收集所有子模块的构建产出统一打包:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>rpm-maven-plugin</artifactId> <version>2.4.1</version> <executions> <execution> <goals> <goal>rpm</goal> </goals> <phase>package</phase> <configuration> <group>com.abc.zyx</group> <artifactId>Main_prj_name_2.11</artifactId> <version>${project.version}</version> <!-- 配置需要包含的子模块资源路径,可根据实际需求调整 --> <mappings> <mapping> <directory>/opt/your_app_path</directory> <sources> <source> <location>submodule1/target/*</location> </source> <source> <location>submodule2/target/*</location> </source> </sources> </mapping> </mappings> </configuration> </execution> </executions> </plugin>
步骤4:调整GitLab CI发布逻辑
修改.gitlab-ci.yml中的发布命令,跳过子模块的发布流程,仅发布父项目生成的统一RPM包:
deploy: script: # 构建所有子模块产出 - mvn clean install # 仅执行父项目的发布逻辑 - mvn -pl . deploy
内容的提问来源于stack exchange,提问作者Deep Chitroda
相关产品推荐
相关产品推荐

