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

Gradle发布至Artifactory快照仓库时SNAPSHOT未解析为时间戳问题

Gradle发布Artifactory快照时SNAPSHOT未生成时间戳版本的解决方案

我之前也碰到过一模一样的问题——用Gradle的maven-publish和Artifactory插件发布快照时,版本号始终是1.0.1-SNAPSHOT.jar这种原始格式,没有自动转换成带时间戳的版本,导致依赖这个项目的构建拉取快照时频繁出问题。而Maven能正常处理,核心原因是Maven默认内置了快照版本的时间戳转换逻辑,Gradle的maven-publish插件则需要我们显式配置来触发这个行为,同时配合Artifactory插件的正确设置。

下面是一步步的解决方法:

1. 确认项目版本的基础配置

首先检查你的build.gradle,确保版本号确实带有-SNAPSHOT后缀:

group = "com.yourcompany"
artifactId = "your-project"
version = "1.0.1-SNAPSHOT"

2. 配置maven-publish的快照版本映射

在publishing块中,给你的Maven Publication添加版本映射规则,让Gradle识别快照版本并生成时间戳格式:

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
            
            // 配置版本映射,确保快照版本按Maven规则生成时间戳
            versionMapping {
                usage('java-api') {
                    fromResolutionOf('runtimeClasspath')
                }
                usage('java-runtime') {
                    fromResolutionResult()
                }
            }
            
            // 保证pom文件中的版本与项目版本一致
            pom {
                version = project.version
                groupId = project.group
                artifactId = project.artifactId
            }
        }
    }
}

3. 调整Artifactory插件的发布配置

关键是在artifactory块的发布仓库配置中开启maven = true,这会告诉Artifactory插件按照Maven的快照规则处理发布流程:

plugins {
    id 'java'
    id 'maven-publish'
    id 'com.jfrog.artifactory' version 'latest-stable-version' // 替换为你使用的插件版本
}

artifactory {
    contextUrl = "http://your-artifactory-url" // 你的Artifactory实例地址
    
    publish {
        repository {
            repoKey = 'libs-snapshot-local' // 你的快照仓库Key
            username = artifactoryUsername // 建议从gradle.properties读取敏感信息
            password = artifactoryPassword
            maven = true // 核心配置:启用Maven风格快照处理
        }
        
        defaults {
            publications('mavenJava') // 指定要发布的publication
            publishArtifacts = true
            publishPom = true
        }
    }
    
    resolve {
        repository {
            repoKey = 'libs-snapshot' // 快照仓库的读取Key
            username = artifactoryUsername
            password = artifactoryPassword
            maven = true
        }
    }
}

4. 检查Artifactory仓库的快照行为设置

登录Artifactory后台,找到你的快照仓库(比如libs-snapshot-local),进入Repository Settings -> Maven Settings,确认Snapshot Version Behavior设置为Unique。这个设置会强制要求上传的快照版本是带时间戳的,避免同名jar被覆盖,同时也能让Artifactory正确识别Gradle上传的快照包。

5. 测试发布

执行Gradle发布任务验证效果:

./gradlew clean build artifactoryPublish

之后去Artifactory仓库查看,应该能看到类似1.0.1-20240520.153022-1.jar格式的快照包了,依赖该项目的其他构建也能正常解析到最新的快照版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:29:35