如何配置Jenkins将JAR包自动上传至Maven仓库(Archiva)
解决Jenkins自动上传JAR到Archiva而非WAR的问题
我来帮你搞定这个问题!核心是先调整Maven的配置,让它只把JAR包作为部署目标,再配合Jenkins的命令执行逻辑就能解决。下面分步骤说明:
一、先从Maven配置入手(根源解决)
Jenkins本质是调用Maven命令执行部署,所以先让Maven明确只上传JAR,而非默认的所有打包产物。
方法1:直接配置maven-deploy-plugin指定部署构件
在你的pom.xml的build节点下,添加或修改maven-deploy-plugin的配置,明确指定要部署的JAR文件:
<build> <plugins> <!-- 保留你原本生成WAR、JAR的插件配置 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <version>3.1.1</version> <configuration> <!-- 只部署指定的JAR构件 --> <artifacts> <artifact> <file>${project.build.directory}/${project.build.finalName}.jar</file> <type>jar</type> <classifier></classifier> </artifact> </artifacts> </configuration> </plugin> </plugins> </build>
这样配置后,Maven执行deploy命令时,只会上传你指定的JAR文件,WAR包会被跳过。
方法2:用Maven Profile区分打包与部署(更灵活)
如果需要保留WAR包的生成,但只在部署阶段上传JAR,可以创建专属Profile:
<profiles> <profile> <id>deploy-jar-only</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <version>3.1.1</version> <configuration> <artifacts> <artifact> <file>${project.build.directory}/${project.build.finalName}.jar</file> <type>jar</type> </artifact> </artifacts> </configuration> </plugin> </plugins> </build> </profile> </profiles>
后续Jenkins执行命令时,激活这个Profile即可。
二、Jenkins端的配置调整
1. 基础Maven项目配置
如果是用Jenkins的「Maven项目」类型:
- 在「构建」步骤中,将目标改为:
(如果用了方法1的直接配置,去掉mvn clean deploy -P deploy-jar-only-P deploy-jar-only即可) - 确保Jenkins服务器已配置Archiva的仓库凭证:
在Jenkins全局配置的「Maven」部分,或者在项目的pom.xml中先配置仓库地址:
然后在Jenkins服务器的<distributionManagement> <repository> <id>archiva-releases</id> <url>http://你的Archiva地址/repository/internal/</url> </repository> <snapshotRepository> <id>archiva-snapshots</id> <url>http://你的Archiva地址/repository/snapshots/</url> </snapshotRepository> </distributionManagement>~/.m2/settings.xml中添加对应凭证:<servers> <server> <id>archiva-releases</id> <username>你的Archiva账号</username> <password>你的Archiva密码</password> </server> <server> <id>archiva-snapshots</id> <username>你的Archiva账号</username> <password>你的Archiva密码</password> </server> </servers>
2. Jenkins Pipeline配置(如果用流水线)
如果是用Pipeline脚本,示例如下:
pipeline { agent any tools { maven 'Maven-3.8.6' // 替换成你Jenkins中配置的Maven名称 } stages { stage('Build Packages') { steps { sh 'mvn clean package' // 生成WAR和JAR } } stage('Deploy JAR to Archiva') { steps { sh 'mvn deploy -P deploy-jar-only' // 仅上传JAR } } } }
三、验证
执行Jenkins构建后,去Archiva的对应仓库(发布版/快照版)查看,应该能看到JAR包已经上传,WAR包不会出现在仓库中。如果有问题,查看Jenkins的构建日志,看Maven的deploy阶段输出,确认是否只处理了JAR文件。
内容的提问来源于stack exchange,提问作者KESO
相关产品推荐
相关产品推荐

