Gradle Kotlin DSL下上传jar包到maven中央仓库

577 阅读1分钟

最近有需求需要将jar包上传到maven中央仓库,发现基于Gradle Kotlin DSL的教程不太多,记录一下自己上传jar包的流程。 上传的方式有好几种,我是使用普通的方式进行jar包的上传。

注册sonatype

1.注册sonatype的jira账号 地址:issues.sonatype.org/login.jsp image.png 2.登录jira并新建问题 image.png 3.填写项目信息 image.png 概要,ProjectURL,SCMurl都比较好理解,url都只需要填项目的github地址就可以了。Group Id需要注意一下要跟你后续验证的地址一致 4.Group Id认证 当问题创建完成会有工作人员添加评论,并要求对groupid进行验证,证明这个项目是你本人所有 image.png 两种方式,一种dns解析认证,一种令牌认证,我选择的是令牌认证 原文地址: 选择坐标 - 中央存储库文档 (sonatype.org) 大致流程就是在你的代码库如,github,gitlab等创建对应问题编号的库,同时groupid要指向你的账号地址

image.png

各仓库对应地址格式: image.png 全部流程走完后等待验证,验证成功会在你的jira下评论 image.png 5.登录Nexus Repository Manager Nexus Repository Manager (sonatype.org) image.png 在管理端校验jar包上传状态,activity中状态都通过,则点击close,在点击release即可,snapshot版本可能不会在管理端出现 image.png

配置gradle.kts配置

1.基本配置 官方发布手册:Gradle - The Central Repository Documentation (sonatype.org)

plugins {
    id("java")
    id("maven-publish")
    id("signing")
    id("java-library-distribution")
    id("org.jetbrains.intellij") version "1.12.0"
    id("com.github.johnrengelman.shadow") version "7.1.2"
}
tasks.withType<JavaCompile> {
    options.encoding = "UTF-8"
}

tasks.jar {
    // enabled = true
    manifest {
        attributes(mapOf("Premain-Class" to "com.example.proagent.byteBuddy.JavaAgentByBuddy"))
    }
    from(configurations.runtimeClasspath.get().map {
        if (it.isDirectory) it else zipTree(it)
    })
    val sourcesMain = sourceSets.main.get()
    sourcesMain.allSource.forEach { println("add from sources: ${it.name}") }
    from(sourcesMain.output)
}

java {
    withSourcesJar()
    withJavadocJar()
}

group = "io.github.rr9-cn"
version = "1.0"
repositories {
    mavenCentral()
}

// Configure Gradle IntelliJ Plugin
// Read more: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html
intellij {
    version.set("2022.1.4")
    type.set("IC") // Target IDE Platform

    plugins.set(listOf("java"))
}

dependencies{
    implementation("net.bytebuddy:byte-buddy:1.12.6")
    implementation("net.bytebuddy:byte-buddy-agent:1.12.6")
    implementation("javassist:javassist:3.12.1.GA")
    implementation("cn.hutool:hutool-all:5.8.18")
    implementation(files("lib/TreeTable-1.0-SNAPSHOT.jar"))
}
publishing {
    publications{
        create<MavenPublication>("myPublication") {
            from(components["java"])
            pom {
                name.set("calculate-time")
                description.set("calculate-time")
                url.set("https://github.com/RR9-cn/")

                licenses {
                    license {
                        name.set("The Apache License, Version 2.0")
                        url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
                    }
                }

                developers {
                    developer {
                        id.set("RR09")
                        name.set("JJ Chen")
                        email.set("15267764550@163.com")
                    }
                }

                scm {
                    connection.set("scm:git:https://gitee.com/RR09/calculate-time.git")
                    developerConnection.set("scm:git:https://gitee.com/RR09/calculate-time.git")
                    url.set("https://gitee.com/RR09/calculate-time.git")
                }
            }
        }
        repositories {
            maven {
                name = "repository"
                url = uri("https://s01.oss.sonatype.org/content/repositories/releases/")
                credentials {
                    username = System.getenv("NEXUS_USERNAME")
                    password = System.getenv("NEXUS_PASSWORD")
                }
            }
            maven {
                name = "snapshotRepository"
                url = uri("https://s01.oss.sonatype.org/content/repositories/snapshots/")
                credentials {
                    username = System.getenv("NEXUS_USERNAME")
                    password = System.getenv("NEXUS_PASSWORD")
                }
            }
        }
    }
}

signing {
    sign(publishing.publications["myPublication"])
}


tasks {

    // Set the JVM compatibility versions
    withType<JavaCompile> {
        sourceCompatibility = "1.8"
        targetCompatibility = "1.8"
        options.encoding = "utf-8"
    }
    
    patchPluginXml {
        sinceBuild.set("221")
        untilBuild.set("231.*")
    }

    signPlugin {
        certificateChain.set(System.getenv("CERTIFICATE_CHAIN"))
        privateKey.set(System.getenv("PRIVATE_KEY"))
        password.set(System.getenv("PRIVATE_KEY_PASSWORD"))
    }

    publishPlugin {
        token.set(System.getenv("PUBLISH_TOKEN"))
    }
}

官方提供的一般都是gradle而不是基于kotlinDSL的,所以需要自己转换成kotlin语法 其中打包源码和javadoc的基础配置如下,如果基于gradle的方式转换成kotlin语法是会报错的

java {
    withSourcesJar()
    withJavadocJar()
}

如果需要打包fatjar并上传到maven仓库,需修改打包jar的方式

tasks.jar {
    // enabled = true
    manifest {
        attributes(mapOf("Premain-Class" to "com.example.proagent.byteBuddy.JavaAgentByBuddy"))
    }
    from(configurations.runtimeClasspath.get().map {
        if (it.isDirectory) it else zipTree(it)
    })
    val sourcesMain = sourceSets.main.get()
    sourcesMain.allSource.forEach { println("add from sources: ${it.name}") }
    from(sourcesMain.output)
}

配置完成后,会在publishing任务中出现,根据需要选择上传快照版本还是正式版本

image.png