最近有需求需要将jar包上传到maven中央仓库,发现基于Gradle Kotlin DSL的教程不太多,记录一下自己上传jar包的流程。 上传的方式有好几种,我是使用普通的方式进行jar包的上传。
注册sonatype
1.注册sonatype的jira账号
地址:issues.sonatype.org/login.jsp
2.登录jira并新建问题
3.填写项目信息
概要,ProjectURL,SCMurl都比较好理解,url都只需要填项目的github地址就可以了。Group Id需要注意一下要跟你后续验证的地址一致
4.Group Id认证
当问题创建完成会有工作人员添加评论,并要求对groupid进行验证,证明这个项目是你本人所有
两种方式,一种dns解析认证,一种令牌认证,我选择的是令牌认证
原文地址:
选择坐标 - 中央存储库文档 (sonatype.org)
大致流程就是在你的代码库如,github,gitlab等创建对应问题编号的库,同时groupid要指向你的账号地址
各仓库对应地址格式:
全部流程走完后等待验证,验证成功会在你的jira下评论
5.登录Nexus Repository Manager Nexus Repository Manager (sonatype.org)
在管理端校验jar包上传状态,activity中状态都通过,则点击close,在点击release即可,snapshot版本可能不会在管理端出现
配置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任务中出现,根据需要选择上传快照版本还是正式版本