Jenkins多模块Maven项目发布BuildInfo至Artifactory遇NPE求助
解决Jenkins流水线中Artifactory插件发布BuildInfo时的NPE异常
问题背景
我正在创建Jenkins流水线,需使用Artifactory插件将BuildInfo发布至Artifactory,该项目包含带有独立POM的子模块。流水线代码如下:
pipeline { agent any stages { stage('Checkout') { steps { git 'https://github.com/example/repo.git' } } stage('Build and Publish') { steps { script { def server = Artifactory.server('artifactory-server') def rtMaven = Artifactory.newMavenBuild() rtMaven.deployer releaseRepo: 'libs-release-local', snapshotRepo: 'libs-snapshot-local', server: server rtMaven.resolver releaseRepo: 'libs-release', snapshotRepo: 'libs-snapshot', server: server rtMaven.deployer.deployArtifacts = true def buildInfo = rtMaven.run pom: 'pom.xml', goals: 'clean install' // Publish build info to Artifactory server.publishBuildInfo buildInfo } } } } }
运行时持续抛出如下异常:
Caused by: java.lang.NullPointerException at org.jfrog.build.extractor.maven.BuildInfoRecorder.addDependenciesToCurrentModule(BuildInfoRecorder.java:619) at org.jfrog.build.extractor.maven.BuildInfoRecorder.addModuleToBuild(BuildInfoRecorder.java:466) at org.jfrog.build.extractor.maven.BuildInfoRecorder.finalizeModule(BuildInfoRecorder.java:389) at org.jfrog.build.extractor.maven.BuildInfoRecorder.projectSucceeded(BuildInfoRecorder.java:208)
使用环境:Artifactory插件3.18.3、Jenkins 2.397
解决方案
针对这个NPE异常,可尝试以下几种解决方式:
显式指定Build Info Maven插件版本
这个NPE大概率是因为默认使用的build-info-extractor-maven3版本与Jenkins Artifactory插件不兼容导致的。在流水线中显式指定稳定兼容的版本:script { def server = Artifactory.server('artifactory-server') def rtMaven = Artifactory.newMavenBuild() rtMaven.tool = 'M3' // 确保Jenkins已配置ID为M3的Maven安装 rtMaven.runnerArgs = '-DbuildInfo.plugins.version=3.2.4' // 指定稳定兼容的插件版本 rtMaven.deployer releaseRepo: 'libs-release-local', snapshotRepo: 'libs-snapshot-local', server: server rtMaven.resolver releaseRepo: 'libs-release', snapshotRepo: 'libs-snapshot', server: server def buildInfo = rtMaven.run pom: 'pom.xml', goals: 'clean install' server.publishBuildInfo buildInfo }调整Maven构建命令与部署配置
不需要手动设置rtMaven.deployer.deployArtifacts = true,改用deploy目标触发部署,同时添加模块参数确保依赖解析完整:def buildInfo = rtMaven.run pom: 'pom.xml', goals: 'clean deploy -pl . -am'-pl . -am会确保当前模块及其依赖的子模块都被正确构建,避免子模块依赖解析时出现空引用。升级Artifactory插件版本
3.18.3版本存在已知的子模块处理bug,建议升级到最新的稳定版本(如4.x系列),新版本修复了大量NPE相关问题,同时确认Jenkins 2.397与新版本插件的兼容性。检查子模块POM配置
验证所有子模块的POM文件:- 确保
<parent>标签正确指向父POM,路径、版本无错误 - 所有依赖的
<groupId>、<artifactId>、<version>声明完整,无缺失项 - 子模块间的依赖引用正确,避免不存在的依赖导致解析空对象
- 确保
内容的提问来源于stack exchange,提问作者User1v0
相关产品推荐
相关产品推荐

