From dc88436c7f625b2514fa6dae08070d2c59b0301a Mon Sep 17 00:00:00 2001 From: Thomas Keller Date: Thu, 16 Dec 2021 15:29:04 +0100 Subject: [PATCH] Introduce a BOM for Mockito's artifacts (closes #2321) (#2323) Co-authored-by: Thomas Keller --- gradle/java-library.gradle | 2 - gradle/java-publication.gradle | 72 ++++++++++++++++++++-------------- settings.gradle.kts | 3 +- subprojects/bom/bom.gradle | 23 +++++++++++ 4 files changed, 68 insertions(+), 32 deletions(-) create mode 100644 subprojects/bom/bom.gradle diff --git a/gradle/java-library.gradle b/gradle/java-library.gradle index fd29ed862c..b5949b76fe 100644 --- a/gradle/java-library.gradle +++ b/gradle/java-library.gradle @@ -1,8 +1,6 @@ apply plugin: "java" apply plugin: "java-library" -group = 'org.mockito' - if (!archivesBaseName.startsWith("mockito-")) { archivesBaseName = "mockito-" + project.name } diff --git a/gradle/java-publication.gradle b/gradle/java-publication.gradle index b3f9abc048..8c0b255d7e 100644 --- a/gradle/java-publication.gradle +++ b/gradle/java-publication.gradle @@ -1,30 +1,35 @@ -//Sources/javadoc artifacts required by Maven module publications -def licenseSpec = copySpec { - from project.rootDir - include "LICENSE" -} +group = 'org.mockito' -task sourcesJar(type: Jar, dependsOn: classes) { - classifier = 'sources' - from sourceSets.main.allSource - with licenseSpec -} +plugins.withId("java") { + //Sources/javadoc artifacts required by Maven module publications + def licenseSpec = copySpec { + from project.rootDir + include "LICENSE" + } -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from tasks.javadoc - with licenseSpec -} + task sourcesJar(type: Jar, dependsOn: classes) { + classifier = 'sources' + from sourceSets.main.allSource + with licenseSpec + } -jar { - with licenseSpec -} + task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from tasks.javadoc + with licenseSpec + } -artifacts { - archives sourcesJar - archives javadocJar + artifacts { + archives sourcesJar + archives javadocJar + } + + jar { + with licenseSpec + } } + tasks.withType(GenerateModuleMetadata) { enabled = false } @@ -34,9 +39,14 @@ apply plugin: "maven-publish" publishing { publications { javaLibrary(MavenPublication) { - from components.java - artifact sourcesJar - artifact javadocJar + plugins.withId("java") { + from components.java + artifact sourcesJar + artifact javadocJar + } + plugins.withId("java-platform") { + from components.javaPlatform + } artifactId = project.archivesBaseName @@ -44,10 +54,12 @@ publishing { name = artifactId description = project.description - //Gradle does not write 'jar' packaging to the pom (unlike other packaging types). - //This is OK because 'jar' is implicit/default: - // https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#minimal-pom - packaging = project.tasks.jar.extension + plugins.withId("java") { + //Gradle does not write 'jar' packaging to the pom (unlike other packaging types). + //This is OK because 'jar' is implicit/default: + // https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#minimal-pom + packaging = project.tasks.jar.extension + } url = "https://github.com/mockito/mockito" licenses { @@ -88,8 +100,10 @@ publishing { repositories { maven { url = "$buildDir/repo" } } } +plugins.withId("java") { //fleshes out problems with Maven pom generation when building -tasks.build.dependsOn("publishJavaLibraryPublicationToMavenLocal") + tasks.build.dependsOn("publishJavaLibraryPublicationToMavenLocal") +} apply plugin: 'signing' //https://docs.gradle.org/current/userguide/signing_plugin.html signing { diff --git a/settings.gradle.kts b/settings.gradle.kts index fe4365e306..9cb91c04ef 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -16,7 +16,8 @@ include("inline", "memory-test", "errorprone", "junitJupiterParallelTest", - "osgi-test") + "osgi-test", + "bom") if (!JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_17) && (System.getenv("ANDROID_SDK_ROOT") != null || File(".local.properties").exists())) { include("androidTest") diff --git a/subprojects/bom/bom.gradle b/subprojects/bom/bom.gradle new file mode 100644 index 0000000000..569f6d6583 --- /dev/null +++ b/subprojects/bom/bom.gradle @@ -0,0 +1,23 @@ +plugins { + id('java-platform') +} + +description = "Mockito Bill of Materials (BOM)" + +if (!archivesBaseName.startsWith("mockito-")) { + archivesBaseName = "mockito-" + project.name +} + +apply from: "$rootDir/gradle/java-publication.gradle" + +dependencies { + constraints { + project.rootProject.subprojects.forEach { subproject -> + if (!subproject.name.endsWith("Test") && + !subproject.name.endsWith("-test") && + subproject.name != "bom") { + api(subproject) + } + } + } +}