@@ -22,6 +22,7 @@ class WaenaRootPlugin : Plugin<Project> {
2222
2323 companion object {
2424 val CENTRAL = Pair (" https://central.sonatype.com/repository/maven-snapshots/" , " https://central.sonatype.com/api/v1/publisher" )
25+ const val CONFIGURE_REMOTE_PUBLISHING_PROPERTY = " waenaConfigureRemotePublishing"
2526 }
2627
2728 override fun apply (target : Project ) {
@@ -37,25 +38,37 @@ class WaenaRootPlugin : Plugin<Project> {
3738 rootProject.plugins.apply (TaskTreePlugin ::class .java)
3839 rootProject.plugins.apply (InfoPlugin ::class .java)
3940 val waenaExtension = rootProject.extensions.create(" waena" , WaenaExtension ::class .java, rootProject)
41+ val configureRemotePublishing = shouldConfigureRemotePublishing(rootProject)
4042
4143 rootProject.allprojects.forEach { target ->
4244 target.plugins.apply (ContactsPlugin ::class .java)
4345 }
4446
45- configureNexusPublishPlugin(rootProject, waenaExtension)
47+ if (configureRemotePublishing) {
48+ configureNexusPublishPlugin(rootProject, waenaExtension)
4649
47- rootProject.afterEvaluate {
48- if (! useNexusPublishPlugin(rootProject)) {
49- configureJReleaser(rootProject)
50+ rootProject.afterEvaluate {
51+ if (! useNexusPublishPlugin(rootProject)) {
52+ configureJReleaser(rootProject)
53+ }
5054 }
55+ } else {
56+ rootProject.logger.info(
57+ " Skipping remote publishing configuration. " +
58+ " Set -P$CONFIGURE_REMOTE_PUBLISHING_PROPERTY =true to force-enable it."
59+ )
5160 }
5261 }
5362
5463 private fun Project.configureJReleaser (rootProject : Project ) {
5564 val isSnapshot = rootProject.version.toString().endsWith(" -SNAPSHOT" )
56- rootProject.tasks.getByPath(" :initializeSonatypeStagingRepository" ).enabled = isSnapshot
57- rootProject.tasks.getByPath(" :closeSonatypeStagingRepository" ).enabled = isSnapshot
58- rootProject.tasks.getByPath(" :releaseSonatypeStagingRepository" ).enabled = isSnapshot
65+ listOf (
66+ " :initializeSonatypeStagingRepository" ,
67+ " :closeSonatypeStagingRepository" ,
68+ " :releaseSonatypeStagingRepository"
69+ ).forEach { taskPath ->
70+ rootProject.tasks.findByPath(taskPath)?.enabled = isSnapshot
71+ }
5972 rootProject.allprojects.forEach { project ->
6073 project.afterEvaluate {
6174 project.tasks.findByName(" publishNebulaPublicationToSonatypeRepository" )?.enabled = isSnapshot
@@ -131,6 +144,36 @@ class WaenaRootPlugin : Plugin<Project> {
131144 return publishMode != WaenaExtension .PublishMode .Central
132145 }
133146
147+ private fun shouldConfigureRemotePublishing (rootProject : Project ): Boolean {
148+ rootProject.findProperty(CONFIGURE_REMOTE_PUBLISHING_PROPERTY )?.toString()?.let { configuredValue ->
149+ configuredValue.toBooleanStrictOrNull()?.let { return it }
150+ rootProject.logger.warn(
151+ " Ignoring invalid value '$configuredValue ' for $CONFIGURE_REMOTE_PUBLISHING_PROPERTY . " +
152+ " Expected true or false."
153+ )
154+ }
155+
156+ if (rootProject.gradle.parent != null ) {
157+ return false
158+ }
159+
160+ val requestedTasks = rootProject.gradle.startParameter.taskNames
161+ if (requestedTasks.isEmpty()) {
162+ return true
163+ }
164+ return requestedTasks
165+ .map { taskPath -> taskPath.substringAfterLast(' :' ) }
166+ .any { taskName ->
167+ taskName.equals(" snapshot" , ignoreCase = true )
168+ || taskName.equals(" candidate" , ignoreCase = true )
169+ || taskName.equals(" final" , ignoreCase = true )
170+ || taskName.contains(" publish" , ignoreCase = true )
171+ || taskName.contains(" release" , ignoreCase = true )
172+ || taskName.contains(" sonatype" , ignoreCase = true )
173+ || taskName.contains(" jreleaser" , ignoreCase = true )
174+ }
175+ }
176+
134177 fun provideUrls (extension : WaenaExtension ) = DefaultProvider ({
135178 when (extension.publishMode.get()) {
136179 WaenaExtension .PublishMode .Central -> CENTRAL
0 commit comments