11package nmcp.internal
22
33import gratatouille.wiring.capitalizeFirstLetter
4+ import java.io.File
45import nmcp.CentralPortalOptions
5- import nmcp.internal.task.NmcpPublishWithPublisherApiTask
66import nmcp.internal.task.registerNmcpFindDeploymentNameTask
7+ import nmcp.internal.task.registerNmcpPublishFileByFileToFileSystemTask
78import nmcp.internal.task.registerNmcpPublishFileByFileToSnapshotsTask
89import nmcp.internal.task.registerNmcpPublishWithPublisherApiTask
9- import nmcp.nmcpAggregationExtensionName
10- import nmcp.nmcpExtensionName
1110import nmcp.transport.defaultParallelism
1211import org.gradle.api.Action
1312import org.gradle.api.Named
@@ -17,7 +16,6 @@ import org.gradle.api.attributes.HasConfigurableAttributes
1716import org.gradle.api.attributes.Usage
1817import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE
1918import org.gradle.api.file.FileCollection
20- import org.gradle.api.provider.Property
2119import org.gradle.api.publish.plugins.PublishingPlugin.PUBLISH_TASK_GROUP
2220import org.gradle.api.tasks.bundling.Zip
2321
@@ -52,31 +50,33 @@ internal fun HasConfigurableAttributes<*>.configureAttributes(project: Project)
5250 }
5351}
5452
53+ internal enum class Kind {
54+ aggregation,
55+ allPublications
56+ }
57+
5558internal fun Project.registerPublishToCentralPortalTasks (
56- name : String ,
59+ kind : Kind ,
5760 inputFiles : FileCollection ,
5861 action : Action <CentralPortalOptions >,
5962) {
63+ val name = kind.name
6064 val spec = objects.newInstance(CentralPortalOptions ::class .java)
6165 action.execute(spec)
6266
6367 val releaseTaskName = " nmcpPublish${name.capitalizeFirstLetter()} ToCentralPortal"
6468 val snapshotTaskName = " nmcpPublish${name.capitalizeFirstLetter()} ToCentralPortalSnapshots"
69+ val localTaskName = " nmcpPublish${name.capitalizeFirstLetter()} ToMavenLocal"
6570 val zipTaskName = " nmcpZip${name.capitalizeFirstLetter()} "
6671 val findDeploymentNameTaskName = " nmcpFind${name.capitalizeFirstLetter()} DeploymentName"
6772
68- val shortcut = when (name) {
69- " aggregation" ,
70- " allPublications" -> name
71- else -> null
72- }
7373 val description = when (name) {
7474 " aggregation" -> " Publishes the aggregation"
7575 " allPublications" -> " Publishes all the maven publications"
7676 else -> null
7777 }
78- val lifecycleTaskName = shortcut?. let { " publish${it .capitalizeFirstLetter()} ToCentralPortal" }
79- val snapshotsLifecycleTaskName = shortcut?. let { " publish${it .capitalizeFirstLetter()} ToCentralPortalSnapshots" }
78+ val centralPortalLifecycleTaskName = " publish${name .capitalizeFirstLetter()} ToCentralPortal"
79+ val snapshotsLifecycleTaskName = " publish${name .capitalizeFirstLetter()} ToCentralPortalSnapshots"
8080
8181 val zipName = " ${name} .zip"
8282 val zipTaskProvider = tasks.register(zipTaskName, Zip ::class .java) {
@@ -107,31 +107,34 @@ internal fun Project.registerPublishToCentralPortalTasks(
107107 validationTimeoutSeconds = spec.validationTimeout.map { it.seconds },
108108 publishingTimeoutSeconds = spec.publishingTimeout.map { it.seconds },
109109 )
110-
111- if (lifecycleTaskName != null ) {
112- project.tasks.register(lifecycleTaskName) {
113- it.group = PUBLISH_TASK_GROUP
114- it.description = " $description to the Central Releases repository."
115- it.dependsOn(task)
116- }
110+ project.tasks.register(centralPortalLifecycleTaskName) {
111+ it.group = PUBLISH_TASK_GROUP
112+ it.description = " $description to the Central Releases repository."
113+ it.dependsOn(task)
117114 }
118115
119- val snapshots = registerNmcpPublishFileByFileToSnapshotsTask(
116+ val centralSnapshots = registerNmcpPublishFileByFileToSnapshotsTask(
120117 taskName = snapshotTaskName,
121118 username = spec.username,
122119 password = spec.password,
123120 snapshotsUrl = project.provider { " https://central.sonatype.com/repository/maven-snapshots/" },
124121 inputFiles = inputFiles,
125122 parallelism = spec.uploadSnapshotsParallelism.orElse(defaultParallelism),
126123 )
127- if (snapshotsLifecycleTaskName != null ) {
128- project.tasks.register(snapshotsLifecycleTaskName) {
129- it.group = PUBLISH_TASK_GROUP
130- it.description = " $description to the Central Snapshots repository."
131- it.dependsOn(snapshots)
132- }
124+ project.tasks.register(snapshotsLifecycleTaskName) {
125+ it.group = PUBLISH_TASK_GROUP
126+ it.description = " $description to the Central Snapshots repository."
127+ it.dependsOn(centralSnapshots)
133128 }
134129
130+ val m2File = File (System .getProperty(" user.home" )).resolve(" .m2/repository" )
131+ registerNmcpPublishFileByFileToFileSystemTask(
132+ taskName = localTaskName,
133+ m2AbsolutePath = project.provider { m2File.absolutePath },
134+ inputFiles = inputFiles,
135+ parallelism = spec.uploadSnapshotsParallelism.orElse(defaultParallelism),
136+ )
137+
135138 /* *
136139 * Detect early if the username and/or password are missing.
137140 * This gives feedback to the user before compiling all projects.
0 commit comments