如何通过Gradle生成含Maven构件的Zip包适配Sonatype新系统?
用Gradle生成Sonatype手动上传所需的构件Zip包
当然可以实现,直接用Gradle自带的Zip任务就能搞定,核心思路是把Maven发布流程中生成的所有构件(jar、pom、源码包、文档包等)都打包到Zip里就行,以下是具体配置:
前提准备
确保你的项目已经配置了maven-publish插件,并且能正常生成所需的构件(主jar、pom、sources jar、javadoc jar等)。
Groovy DSL 配置示例
plugins { id 'java' id 'maven-publish' } // 配置Maven发布信息,生成基础构件 publishing { publications { mavenJava(MavenPublication) { from components.java // 引入sources和javadoc jar(如果需要) artifact sourcesJar artifact javadocJar } } } // 自定义生成sources jar的任务 task sourcesJar(type: Jar) { from sourceSets.main.allJava archiveClassifier.set('sources') } // 自定义生成javadoc jar的任务 task javadocJar(type: Jar) { from javadoc archiveClassifier.set('javadoc') } // 核心任务:生成Sonatype上传用的Zip包 task sonatypeUploadZip(type: Zip) { // 自定义Zip包名称,建议包含项目名和版本号 archiveName = "${project.name}-${project.version}-sonatype-upload.zip" // 指定Zip包输出目录 destinationDirectory.set(file("$buildDir/distributions")) // 包含Maven发布的所有构件文件 from publishing.publications.mavenJava.artifacts.files // 可选:把pom.xml单独放在Zip根目录(匹配Sonatype的上传要求) into('') { from publishing.publications.mavenJava.pom } } // 确保Zip任务执行前,所有构件都已生成 sonatypeUploadZip.dependsOn publishToMavenLocal
Kotlin DSL 配置示例
plugins { java `maven-publish` } publishing { publications { create<MavenPublication>("mavenJava") { from(components["java"]) artifact(tasks["sourcesJar"]) artifact(tasks["javadocJar"]) } } } tasks.register<Jar>("sourcesJar") { from(sourceSets.main.get().allJava) archiveClassifier.set("sources") } tasks.register<Jar>("javadocJar") { from(tasks.javadoc) archiveClassifier.set("javadoc") } tasks.register<Zip>("sonatypeUploadZip") { archiveName = "${project.name}-${project.version}-sonatype-upload.zip" destinationDirectory.set(file("$buildDir/distributions")) from(publishing.publications.named<MavenPublication>("mavenJava").get().artifacts.files) // 可选:将pom.xml放在Zip根目录 into("") { from(publishing.publications.named<MavenPublication>("mavenJava").get().pom) } } // 依赖构件生成任务,确保打包前构件就绪 tasks.named<Zip>("sonatypeUploadZip") { dependsOn(tasks.publishToMavenLocal) }
使用方式
在项目根目录执行:
- Linux/macOS:
./gradlew sonatypeUploadZip - Windows:
gradlew.bat sonatypeUploadZip
生成的Zip包会输出到build/distributions目录下,里面包含了所有Sonatype手动上传需要的构件。如果你的项目有额外的构件(比如GPG签名文件),只需在sonatypeUploadZip任务中添加对应的文件路径即可。
内容的提问来源于stack exchange,提问作者Johann
相关产品推荐
相关产品推荐

