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

Gradle 7将War包发布到Artifactory失败问题排查

问题描述

项目已从JDK 8升级至JDK 17,同时将Gradle从4.x版本升级到7.x版本。本地可正常构建War包并运行应用,但将War包发布到Artifactory时,未出现Gradle 4及以下版本中可见的完整文件块,且日志中出现报错。

发布任务定义

publishing {
    publications {
        product(MavenPublication) {
            artifactId "$project.name"
            artifact war
            
            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')

                configurations.compileClasspath.allDependencies.each {
                    def dependencyNode = dependenciesNode.appendNode('dependency')
                    dependencyNode.appendNode('groupId', it.group)
                    dependencyNode.appendNode('artifactId', it.name)
                    dependencyNode.appendNode('version', it.version)
                }
            }
        }
    }
}

使用的插件

plugins {
    id 'org.springframework.boot' version '2.7.4'
    id 'io.spring.dependency-management' version '1.0.14.RELEASE'
    id 'java'
    id 'war'
    id 'idea'
    id 'eclipse'
}

报错信息

:project.package:publishProductPublicationToArtifactoryRepository任务执行信息:
为确保正确性,已禁用该任务的执行优化,原因如下:

  • Gradle检测到路径'project-name-1.3.18-SNAPSHOT.war'存在问题:发布任务使用了':project.package:bootWar'任务的输出,但未声明显式或隐式依赖。这可能导致任务执行顺序不确定,进而产生错误结果。
    无法上传snapshot-maven-metadata.xml的校验和,因为远程仓库不支持SHA-512。此问题不会导致构建失败。
    无法上传module-maven-metadata.xml的校验和,因为远程仓库不支持SHA-512。此问题不会导致构建失败。

解决方案

1. 修复任务依赖缺失问题

报错核心是发布任务未正确关联bootWar任务。Spring Boot的war插件会生成bootWar任务来构建可执行War包,而当前代码中引用的war是普通War任务的产物,导致依赖链断裂。修改发布任务如下:

publishing {
    publications {
        product(MavenPublication) {
            artifactId "$project.name"
            // 替换为bootWar任务的输出产物
            artifact bootWar
            
            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')

                // Gradle 7.x中推荐使用runtimeClasspath替代compileClasspath,覆盖运行时依赖
                configurations.runtimeClasspath.allDependencies.each {
                    // 过滤无效依赖项
                    if (it.group && it.name && it.version) {
                        def dependencyNode = dependenciesNode.appendNode('dependency')
                        dependencyNode.appendNode('groupId', it.group)
                        dependencyNode.appendNode('artifactId', it.name)
                        dependencyNode.appendNode('version', it.version)
                        // 按需添加依赖范围,比如runtime
                        dependencyNode.appendNode('scope', 'runtime')
                    }
                }
            }
        }
    }
}

2. 解决SHA-512校验不支持问题

由于Artifactory不支持SHA-512校验,需在Gradle中配置仅使用支持的校验算法:

在项目的build.gradle中添加:

tasks.withType(PublishToMavenRepository) {
    repository {
        authentication {
            checksum {
                algorithms = ['SHA-1', 'MD5']
            }
        }
    }
}

3. 确保发布文件完整

Gradle 7.x的Maven发布逻辑与4.x存在差异,修改配置后重新执行发布任务,检查Artifactory中的文件结构,确认War包、pom.xml及对应校验文件已完整上传。


内容的提问来源于stack exchange,提问作者Vivek Panday

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:55:17