Include Gradle Plugin to generate Maven BOM.
Refactor the spring-geode-bom module.
This commit is contained in:
@@ -46,6 +46,7 @@ class ArtifactoryPlugin implements Plugin<Project> {
|
||||
}
|
||||
defaults {
|
||||
publications('mavenJava')
|
||||
publishConfigs('archives')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,8 +17,6 @@ package io.spring.gradle.convention
|
||||
|
||||
import org.gradle.api.Plugin
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.plugins.JavaPlatformPlugin
|
||||
import org.springframework.gradle.CopyPropertiesPlugin
|
||||
import org.springframework.gradle.maven.SpringMavenPlugin
|
||||
|
||||
/**
|
||||
@@ -27,9 +25,44 @@ import org.springframework.gradle.maven.SpringMavenPlugin
|
||||
*/
|
||||
class MavenBomPlugin implements Plugin<Project> {
|
||||
|
||||
static String MAVEN_BOM_TASK_NAME = "mavenBom"
|
||||
|
||||
@Override
|
||||
void apply(Project project) {
|
||||
project.plugins.apply(JavaPlatformPlugin)
|
||||
|
||||
// Declares a new configuration that will be used to associate with Project artifacts
|
||||
// (namely, the Maven BOM file).
|
||||
project.configurations {
|
||||
archives
|
||||
}
|
||||
|
||||
project.group = project.rootProject.group
|
||||
project.plugins.apply(SpringMavenPlugin)
|
||||
project.plugins.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.publishToOssrh.dependsOn project.mavenBom
|
||||
|
||||
project.rootProject.allprojects.each { p ->
|
||||
p.plugins.withType(SpringMavenPlugin) {
|
||||
if (!project.name.equals(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
|
||||
}
|
||||
|
||||
// TODO: Why?
|
||||
Utils.configureDeployArtifactsTask(project)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
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)
|
||||
}
|
||||
|
||||
project.publishing {
|
||||
publications {
|
||||
mavenJava(MavenPublication) {
|
||||
pom {
|
||||
packaging = "pom"
|
||||
withXml {
|
||||
asNode().children().last() + {
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
implementation-class=build.GemFireServerPlugin
|
||||
@@ -1,13 +1 @@
|
||||
import io.spring.gradle.convention.SpringModulePlugin
|
||||
|
||||
apply plugin: 'io.spring.convention.bom'
|
||||
|
||||
sonarqube.skipProject = true
|
||||
|
||||
project.rootProject.allprojects.each { p ->
|
||||
p.plugins.withType(SpringModulePlugin) {
|
||||
if (!project.name.equals(p.name)) {
|
||||
project.mavenBom.projects.add(p)
|
||||
}
|
||||
}
|
||||
}
|
||||
apply plugin: 'io.spring.convention.maven-bom'
|
||||
|
||||
Reference in New Issue
Block a user