Refactor how the Maven BOM for the SBDG project is created.

This commit is contained in:
John Blum
2022-02-17 19:33:00 -08:00
parent 6ab57409b8
commit 415e3401cc
4 changed files with 23 additions and 109 deletions

View File

@@ -46,7 +46,6 @@ class ArtifactoryPlugin implements Plugin<Project> {
}
defaults {
publications('mavenJava')
publishConfigs('archives')
}
}
}

View File

@@ -17,51 +17,29 @@ package io.spring.gradle.convention
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.JavaPlatformPlugin
import org.gradle.api.plugins.PluginManager
import org.springframework.gradle.CopyPropertiesPlugin
import org.springframework.gradle.maven.SpringMavenPlugin
/**
* Gradle {@link Plugin} used to generate a Maven BOM for the Gradle {@link Project}.
*
* @author Rob Winch
* @author John Blum
* @see org.gradle.api.Plugin
* @see org.gradle.api.Project
*/
class MavenBomPlugin implements Plugin<Project> {
static String MAVEN_BOM_TASK_NAME = "mavenBom"
@Override
void apply(Project project) {
// Declares a new configuration that will be used to associate with Project artifacts
// (namely, the Maven BOM file).
project.configurations {
archives
}
PluginManager pluginManager = project.getPluginManager();
project.group = project.rootProject.group
project.plugins.apply(SpringMavenPlugin)
pluginManager.apply(JavaPlatformPlugin)
pluginManager.apply(SpringMavenPlugin)
pluginManager.apply(CopyPropertiesPlugin)
Utils.skipProjectWithSonarQubePlugin(project)
project.task(MAVEN_BOM_TASK_NAME, type: MavenBomTask, group: 'Generate',
description: 'Configures the Maven POM as a Maven BOM (Bill of Materials)')
project.tasks.artifactoryPublish.dependsOn project.mavenBom
project.tasks.publishToMavenLocal.dependsOn project.mavenBom
project.tasks.publishToOssrh.dependsOn project.mavenBom
project.rootProject.allprojects.each { p ->
p.plugins.withType(SpringMavenPlugin) {
if (!project.name.equals(p.name)) {
//println("Maven BOM Project [${p.name}]")
project.mavenBom.projects.add(p)
}
}
}
// TODO: Shouldn't this be { archives project.mavenBom } according to:
// https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html#getArtifacts--
// TODO: Is this even necessary since this block is defined in MavenBomTask?
project.artifacts {
archives project.mavenBom.bomFile
}
}
}

View File

@@ -1,75 +0,0 @@
package io.spring.gradle.convention
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction
class MavenBomTask extends DefaultTask {
@OutputFile
File bomFile
@Internal
Set<Project> projects = []
@Input
Set<String> getProjectNames() {
return projects*.name as Set
}
MavenBomTask() {
this.group = "Generate"
this.description = "Generates a Maven BOM (Bill of Materials)." +
" See https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Importing_Dependencies"
this.projects = project.subprojects
this.bomFile = project.file("${->project.buildDir}/maven-bom/${->project.name}-${->project.version}.txt")
this.outputs.upToDateWhen { false }
}
@TaskAction
void configureBom() {
bomFile.parentFile.mkdirs()
bomFile.write("Maven BOM (Bill of Materials)"
+ " See https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Importing_Dependencies")
// TODO: Shouldn't this be { archives project.mavenBom } according to:
// https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html#getArtifacts--
project.artifacts {
// Workaround GRADLE-2406 by attaching text artifact
archives(bomFile)
}
def pomDependencyManagementNode = {
delegate.dependencyManagement {
delegate.dependencies {
projects.sort { dep -> "$dep.group:$dep.name" }.each { p ->
delegate.dependency {
delegate.groupId p.group
delegate.artifactId p.name
delegate.version p.version
}
}
}
}
}
project.publishing {
publications {
mavenJava(MavenPublication) {
pom {
packaging = "pom"
withXml {
asNode().children().last() + pomDependencyManagementNode
}
}
}
}
}
}
}

View File

@@ -1 +1,13 @@
import io.spring.gradle.convention.SpringModulePlugin
apply plugin: 'io.spring.convention.maven-bom'
dependencies {
constraints {
project.rootProject.allprojects { p ->
p.plugins.withType(SpringModulePlugin) {
api p
}
}
}
}