1- import io.github.gradlenexus.publishplugin.NexusRepository
21import org.gradle.kotlin.dsl.*
2+ import org.jreleaser.model.Active.ALWAYS
3+
34
45plugins {
56 kotlin(" jvm" ) version " 2.2.21"
67 id(" org.jetbrains.dokka-javadoc" ) version " 2.1.0"
78 id(" org.jetbrains.dokka" ) version " 2.1.0"
89 `maven- publish`
910 signing
10- id(" io.github.gradle-nexus.publish-plugin " ) version " 2.0 .0"
11+ id(" org.jreleaser " ) version " 1.21 .0"
1112}
1213
1314group = " de.joshuagleitze"
@@ -52,8 +53,7 @@ tasks.withType<Test>().configureEach {
5253 }
5354}
5455
55- val ossrhUsername: String? by project
56- val ossrhPassword: String? by project
56+
5757val githubRepository: String? by project
5858val githubOwner = githubRepository?.split(" /" )?.get(0 )
5959val githubToken: String? by project
@@ -84,7 +84,7 @@ val dokkaJar by tasks.registering(Jar::class) {
8484
8585lateinit var publication: MavenPublication
8686lateinit var githubPackages: ArtifactRepository
87- lateinit var mavenCentral : NexusRepository
87+ lateinit var mavenCentralStaging : MavenArtifactRepository
8888
8989publishing {
9090 publications {
@@ -128,6 +128,9 @@ publishing {
128128 }
129129 }
130130 repositories {
131+ mavenCentralStaging = maven(layout.buildDirectory.dir(" publish/maven-central-staging" )) {
132+ name = " MavenCentralStaging"
133+ }
131134 githubPackages = maven(" https://maven.pkg.github.com/$githubRepository " ) {
132135 name = " GitHubPackages"
133136 credentials {
@@ -138,31 +141,41 @@ publishing {
138141 }
139142}
140143
141- nexusPublishing {
142- repositories {
143- mavenCentral = sonatype {
144- username = ossrhUsername
145- password = ossrhPassword
144+ signing {
145+ useInMemoryPgpKeys(
146+ providers.gradleProperty(" signingKey" ).orNull,
147+ providers.gradleProperty(" signingKeyPassword" ).orNull
148+ )
149+ sign(publication)
150+ }
151+
152+ jreleaser {
153+ deploy {
154+ maven {
155+ mavenCentral {
156+ register(" sonatype" ) {
157+ url = " https://central.sonatype.com/api/v1/publisher"
158+ active = ALWAYS
159+ stagingRepository(mavenCentralStaging.url.toString())
160+ }
161+ }
146162 }
147163 }
148164}
149165
150- signing {
151- val signingKey: String? by project
152- val signingKeyPassword: String? by project
153- useInMemoryPgpKeys(signingKey, signingKeyPassword)
154- sign(publication)
155- }
166+ val jreleaserConfig by tasks
167+ val jreleaserDeploy by tasks
156168
157- val closeAndReleaseStagingRepositories by project.tasks
158- closeAndReleaseStagingRepositories .mustRunAfter(mavenCentral .publishTask)
169+ jreleaserDeploy.mustRunAfter(jreleaserConfig)
170+ jreleaserDeploy .mustRunAfter(mavenCentralStaging .publishTask)
159171
160172val release by tasks.registering {
161173 group = " release"
162- description = " Releases the project to Maven Central "
163- dependsOn(githubPackages.publishTask, mavenCentral .publishTask, closeAndReleaseStagingRepositories )
174+ description = " Releases the project to all repositories "
175+ dependsOn(jreleaserConfig, githubPackages.publishTask, mavenCentralStaging .publishTask, jreleaserDeploy )
164176}
165177
166178fun String.drop (prefix : String ) = if (this .startsWith(prefix)) this .drop(prefix.length) else this
167179val ArtifactRepository .publishTask get() = tasks[" publishAllPublicationsTo${this .name} Repository" ]
168- val NexusRepository .publishTask get() = " publishTo${this .name.replaceFirstChar { it.titlecase() }} "
180+ fun ProviderFactory.requiredGradleProperty (name : String ): Provider <String > = gradleProperty(name)
181+ .orElse(provider { throw InvalidUserDataException (" required project property `$name ` was not set!" )})
0 commit comments