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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:02:47