diff --git a/src/main/kotlin/org/danilopianini/gradle/mavencentral/PublishOnCentral.kt b/src/main/kotlin/org/danilopianini/gradle/mavencentral/PublishOnCentral.kt index 110e701e..5459ef2f 100644 --- a/src/main/kotlin/org/danilopianini/gradle/mavencentral/PublishOnCentral.kt +++ b/src/main/kotlin/org/danilopianini/gradle/mavencentral/PublishOnCentral.kt @@ -5,10 +5,8 @@ import org.danilopianini.gradle.mavencentral.MavenConfigurationSupport.configure import org.danilopianini.gradle.mavencentral.ProjectExtensions.registerTaskIfNeeded import org.danilopianini.gradle.mavencentral.ProjectExtensions.setupMavenCentralPortal import org.danilopianini.gradle.mavencentral.tasks.JavadocJar -import org.danilopianini.gradle.mavencentral.tasks.SourceJar import org.gradle.api.Plugin import org.gradle.api.Project -import org.gradle.api.file.CopySpec import org.gradle.api.file.DuplicatesStrategy import org.gradle.api.plugins.JavaPluginExtension import org.gradle.api.publish.PublishingExtension @@ -16,6 +14,7 @@ import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.publish.maven.plugins.MavenPublishPlugin import org.gradle.api.publish.maven.tasks.PublishToMavenRepository import org.gradle.api.tasks.javadoc.Javadoc +import org.gradle.jvm.component.internal.DefaultJvmSoftwareComponent import org.gradle.jvm.tasks.Jar import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.create @@ -40,8 +39,6 @@ class PublishOnCentral : Plugin { private const val PUBLICATION_NAME = "OSSRH" private fun Project.javadocJarTask() = project.registerTaskIfNeeded("javadocJar", JavadocJar::class) - - private fun Project.sourcesJarTask() = project.registerTaskIfNeeded("sourcesJar", SourceJar::class) } override fun apply(project: Project) { @@ -65,21 +62,14 @@ class PublishOnCentral : Plugin { publications { publications -> if (publications.none { it.name == PUBLICATION_NAME }) { publications.register(PUBLICATION_NAME, MavenPublication::class.java) { publication -> - publication.artifact(project.tasks.withType().named("jar")) - val javadocJarTask = project.javadocJarTask() - javadocJarTask.configure { - if (it is JavadocJar) { - it.from(project.tasks.withType()) - } - } - publication.artifact(javadocJarTask) - javadocJarTask.configure { - if (it is CopySpec) { - it.duplicatesStrategy = DuplicatesStrategy.INCLUDE + val componentProvider = + project.components.withType().named( + "java", + ) { javaComponent -> + javaComponent.withJavadocJar() + javaComponent.withSourcesJar() } - } - val sourcesJar = project.sourcesJarTask() - publication.artifact(sourcesJar) + publication.from(componentProvider.get()) publication.pom.packaging = "jar" } project.logger.debug("Created new publication $PUBLICATION_NAME") @@ -116,7 +106,8 @@ class PublishOnCentral : Plugin { project.logger.info("Dokka plugin found, hence javadocJar will be configured") project.tasks.withType().configureEach { it.enabled = false } project.tasks.withType().matching { "javadoc" in it.name }.configureEach { javadocJar -> - javadocJar.from(project.tasks.withType()) + javadocJar.duplicatesStrategy = DuplicatesStrategy.WARN + javadocJar.from(project.tasks.withType().matching { "Publication" in it.name }) javadocJar.from( project.tasks.withType().matching { it.name.contains("html", ignoreCase = true) }, ) diff --git a/src/main/kotlin/org/danilopianini/gradle/mavencentral/tasks/SourceJar.kt b/src/main/kotlin/org/danilopianini/gradle/mavencentral/tasks/SourceJar.kt deleted file mode 100644 index 0e51d169..00000000 --- a/src/main/kotlin/org/danilopianini/gradle/mavencentral/tasks/SourceJar.kt +++ /dev/null @@ -1,63 +0,0 @@ -package org.danilopianini.gradle.mavencentral.tasks - -import java.io.File -import org.gradle.api.file.SourceDirectorySet -import org.gradle.api.tasks.SourceSet -import org.gradle.api.tasks.SourceSetContainer - -/** - * A task generating a Jar file with the project source code. - */ -open class SourceJar : JarWithClassifier("sources") { - init { - description = "Assembles a jar archive containing the sources" - sourceSet("main", false) - } - - /** - * Adds the [SourceSet] with the provided [name] to the contents of the [SourceJar]. - * In case the source set does not exist, if [failOnMissingName] is set, the task throws [IllegalStateException]. - */ - @JvmOverloads - fun sourceSet( - name: String, - failOnMissingName: Boolean = true, - ) { - val sourceSets = project.properties["sourceSets"] as? SourceSetContainer - if (sourceSets != null) { - val sourceSet = sourceSets.findByName(name) - if (sourceSet != null) { - sourceSet(sourceSet) - } else { - check(!failOnMissingName) { - "Project has property 'sourceSets' of type 'SourceSetContainer', but it contains no '$name' entry" - } - } - } else { - check(!failOnMissingName) { - "Project has no property 'sourceSets' of type 'SourceSetContainer'" - } - } - } - - /** - * Adds a [sourceSet] source. - */ - fun sourceSet(sourceSet: SourceSet) { - sourceSet(sourceSet.allSource) - } - - /** - * Adds a [sourceDirectorySet] source. - */ - fun sourceSet(sourceDirectorySet: SourceDirectorySet) { - from(sourceDirectorySet) - } - - /** - * Adds a [file] source. - */ - fun source(file: File) { - from(file) - } -} diff --git a/src/test/resources/org/danilopianini/gradle/test/test0/build.gradle.kts b/src/test/resources/org/danilopianini/gradle/test/test0/build.gradle.kts index e78eeaa2..5f0e4b86 100644 --- a/src/test/resources/org/danilopianini/gradle/test/test0/build.gradle.kts +++ b/src/test/resources/org/danilopianini/gradle/test/test0/build.gradle.kts @@ -15,6 +15,10 @@ publishOnCentral { } } +dependencies { + api("org.apache.commons:commons-lang3:3.17.0") +} + tasks.withType().configureEach { enabled = false } diff --git a/src/test/resources/org/danilopianini/gradle/test/test0/test.yaml b/src/test/resources/org/danilopianini/gradle/test/test0/test.yaml index ffc5b698..10eda649 100644 --- a/src/test/resources/org/danilopianini/gradle/test/test0/test.yaml +++ b/src/test/resources/org/danilopianini/gradle/test/test0/test.yaml @@ -22,6 +22,8 @@ tests: - '\s*(\s|\n)*scm:git:https://github\.com/test/test-publish-on-central' - '\s*(\s|\n)*scm:git:https://github\.com/test/test-publish-on-central' - '\s*' + - '\s*' + - '\s*org.apache.commons' - description: "release and drop tasks get generated" configuration: tasks: