如何在Gradle脚本中获取maven-publish生成的完整构件名称?
获取Maven-Publish发布的完整构件名称
当然可以实现!在使用Gradle的maven-publish插件时,不管是正式release版本还是带时间戳的SNAPSHOT版本,你都能在脚本里拿到最终生成的完整构件名称。
核心思路是访问发布配置(Publication)里的构件信息——Gradle在处理SNAPSHOT发布时,会自动生成带时间戳和build编号的构件文件,此时构件的file.name属性就是最终的完整名称。
示例实现
假设你的maven发布配置如下:
publishing { publications { maven(MavenPublication) { from components.java // 如果有额外构件(比如源码包)也会被包含 artifact sourceJar } } }
你可以添加一个自定义任务来打印或使用这些构件名称:
task logPublishedArtifacts { doLast { // 遍历当前maven发布配置下的所有构件 publishing.publications.maven.artifacts.each { artifact -> def fullName = artifact.file.name println "最终发布的构件名称:$fullName" // 这里可以把fullName用于其他逻辑,比如记录到文件、通知等 } } } // 让这个任务依赖于发布任务,确保构件已经生成 publish.dependsOn logPublishedArtifacts
直接在发布任务中获取
如果你想在发布动作执行时直接获取,也可以监听PublishToMavenRepository类型的任务:
tasks.withType(PublishToMavenRepository) { doLast { println "本次发布的构件列表:" publication.artifacts.each { artifact -> println "- ${artifact.file.name}" } } }
说明
- 对于正式release版本,
artifact.file.name就是和项目版本一致的名称(比如foo-1.2.3.zip); - 对于SNAPSHOT版本,这个值会自动变成带时间戳和build号的完整名称(比如
foo-1.2.4-20220427.094127-1.zip); - 要确保任务执行时机正确——必须在Gradle完成构件生成之后(也就是发布流程的后期),才能拿到正确的文件名。
内容的提问来源于stack exchange,提问作者imrichardcole
相关产品推荐
相关产品推荐

