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
相关产品推荐
相关产品推荐

