Configure Maven publications with Gradle
Prior to this commit, the build would use a custom task to create a BOM and manually include/exclude/customize dependencies. It would also use the "maven" plugin to customize the POM before publication. This commit now uses a Gradle Java Platform for publishing the Spring Framework BOM. We're also now using the "maven-publish" plugin to prepare and customize publications. This commit also tells the artifactory plugin (which is currently applied only on the CI) not to publish internal modules. See gh-23282
This commit is contained in:
parent
03701018c6
commit
7ce1f5e652
15
build.gradle
15
build.gradle
|
@ -45,7 +45,7 @@ ext {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
configure(allprojects.findAll { (it.name != "spring-framework-bom") } ) { project ->
|
configure(allprojects.findAll { (it.name != "framework-bom") } ) { project ->
|
||||||
group = "org.springframework"
|
group = "org.springframework"
|
||||||
|
|
||||||
apply plugin: "java"
|
apply plugin: "java"
|
||||||
|
@ -177,6 +177,7 @@ configure(rootProject) {
|
||||||
apply plugin: "kotlin"
|
apply plugin: "kotlin"
|
||||||
apply plugin: "io.spring.nohttp"
|
apply plugin: "io.spring.nohttp"
|
||||||
apply plugin: 'org.springframework.build.api-diff'
|
apply plugin: 'org.springframework.build.api-diff'
|
||||||
|
apply from: "${rootDir}/gradle/publications.gradle"
|
||||||
apply from: "${rootDir}/gradle/docs.gradle"
|
apply from: "${rootDir}/gradle/docs.gradle"
|
||||||
|
|
||||||
nohttp {
|
nohttp {
|
||||||
|
@ -200,10 +201,14 @@ configure(rootProject) {
|
||||||
asciidoctor("io.spring.asciidoctor:spring-asciidoctor-extensions:0.1.3.RELEASE")
|
asciidoctor("io.spring.asciidoctor:spring-asciidoctor-extensions:0.1.3.RELEASE")
|
||||||
}
|
}
|
||||||
|
|
||||||
artifacts {
|
publishing {
|
||||||
archives docsZip
|
publications {
|
||||||
archives schemaZip
|
springFramework(MavenPublication) {
|
||||||
archives distZip
|
artifact docsZip
|
||||||
|
artifact schemaZip
|
||||||
|
artifact distZip
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,35 +1,23 @@
|
||||||
description = "Spring Framework (Bill of Materials)"
|
description = "Spring Framework (Bill of Materials)"
|
||||||
|
|
||||||
apply plugin: "java"
|
apply plugin: 'java-platform'
|
||||||
apply plugin: "maven"
|
apply from: "$rootDir/gradle/publications.gradle"
|
||||||
|
|
||||||
configurations.archives.artifacts.clear()
|
group = "org.springframework"
|
||||||
artifacts {
|
|
||||||
// work around GRADLE-2406 by attaching text artifact
|
|
||||||
archives(file("spring-framework-bom.txt"))
|
|
||||||
}
|
|
||||||
|
|
||||||
install {
|
dependencies {
|
||||||
repositories.mavenInstaller {
|
constraints {
|
||||||
pom.whenConfigured {
|
parent.moduleProjects.sort { "$it.name" }.each {
|
||||||
packaging = "pom"
|
api it
|
||||||
withXml {
|
|
||||||
asNode().children().last() + {
|
|
||||||
delegate.dependencyManagement {
|
|
||||||
delegate.dependencies {
|
|
||||||
parent.moduleProjects.sort { "$it.name" }.each { p ->
|
|
||||||
if (p != project) {
|
|
||||||
delegate.dependency {
|
|
||||||
delegate.groupId(p.group)
|
|
||||||
delegate.artifactId(p.name)
|
|
||||||
delegate.version(p.version)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
publishing {
|
||||||
|
publications {
|
||||||
|
springFramework(MavenPublication) {
|
||||||
|
artifactId = 'spring-framework-bom'
|
||||||
|
from components.javaPlatform
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +0,0 @@
|
||||||
This meta-project is used to generate a bill-of-materials POM that contains the other
|
|
||||||
projects in a dependencyManagement section.
|
|
||||||
|
|
||||||
<https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/overview.html#overview-getting-started>
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
apply plugin: "maven-publish"
|
||||||
|
|
||||||
|
publishing {
|
||||||
|
publications {
|
||||||
|
springFramework(MavenPublication) {
|
||||||
|
pom {
|
||||||
|
name = project.description
|
||||||
|
description = project.description
|
||||||
|
url = "https://github.com/spring-projects/spring-framework"
|
||||||
|
organization {
|
||||||
|
name = "Spring IO"
|
||||||
|
url = "https://spring.io/projects/spring-framework"
|
||||||
|
}
|
||||||
|
licenses {
|
||||||
|
license {
|
||||||
|
name = "Apache License, Version 2.0"
|
||||||
|
url = "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
|
distribution = "repo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scm {
|
||||||
|
url = "https://github.com/spring-projects/spring-framework"
|
||||||
|
connection = "scm:git:git://github.com/spring-projects/spring-framework"
|
||||||
|
developerConnection = "scm:git:git://github.com/spring-projects/spring-framework"
|
||||||
|
}
|
||||||
|
developers {
|
||||||
|
developer {
|
||||||
|
id = "jhoeller"
|
||||||
|
name = "Juergen Hoeller"
|
||||||
|
email = "jhoeller@pivotal.io"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
issueManagement {
|
||||||
|
system = "GitHub"
|
||||||
|
url = "https://github.com/spring-projects/spring-framework/issues"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
apply plugin: 'org.springframework.build.compile'
|
apply plugin: 'org.springframework.build.compile'
|
||||||
apply plugin: 'org.springframework.build.optional-dependencies'
|
apply plugin: 'org.springframework.build.optional-dependencies'
|
||||||
apply plugin: 'org.springframework.build.test-sources'
|
apply plugin: 'org.springframework.build.test-sources'
|
||||||
apply plugin: "maven"
|
apply from: "$rootDir/gradle/publications.gradle"
|
||||||
|
|
||||||
jar {
|
jar {
|
||||||
manifest.attributes["Implementation-Title"] = project.name
|
manifest.attributes["Implementation-Title"] = project.name
|
||||||
|
@ -47,66 +47,14 @@ task javadocJar(type: Jar) {
|
||||||
from javadoc
|
from javadoc
|
||||||
}
|
}
|
||||||
|
|
||||||
artifacts {
|
publishing {
|
||||||
archives sourcesJar
|
publications {
|
||||||
archives javadocJar
|
springFramework(MavenPublication) {
|
||||||
}
|
from components.java
|
||||||
|
artifact sourcesJar
|
||||||
install {
|
artifact javadocJar
|
||||||
repositories.mavenInstaller {
|
|
||||||
customizePom(pom, project)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def customizePom(pom, gradleProject) {
|
|
||||||
pom.whenConfigured { generatedPom ->
|
|
||||||
// eliminate test-scoped dependencies (no need in maven central poms)
|
|
||||||
generatedPom.dependencies.removeAll { dep ->
|
|
||||||
dep.scope == "test"
|
|
||||||
}
|
|
||||||
|
|
||||||
// sort to make pom dependencies order consistent to ease comparison of older poms
|
|
||||||
generatedPom.dependencies = generatedPom.dependencies.sort { dep ->
|
|
||||||
"$dep.scope:$dep.groupId:$dep.artifactId"
|
|
||||||
}
|
|
||||||
|
|
||||||
def managedVersions = dependencyManagement.managedVersions
|
|
||||||
generatedPom.dependencies.findAll{dep -> !dep.version }.each { dep ->
|
|
||||||
dep.version = managedVersions["${dep.groupId}:${dep.artifactId}"]
|
|
||||||
}
|
|
||||||
|
|
||||||
// add all items necessary for maven central publication
|
|
||||||
generatedPom.project {
|
|
||||||
name = gradleProject.description
|
|
||||||
description = gradleProject.description
|
|
||||||
url = "https://github.com/spring-projects/spring-framework"
|
|
||||||
organization {
|
|
||||||
name = "Spring IO"
|
|
||||||
url = "https://projects.spring.io/spring-framework"
|
|
||||||
}
|
|
||||||
licenses {
|
|
||||||
license {
|
|
||||||
name "Apache License, Version 2.0"
|
|
||||||
url "https://www.apache.org/licenses/LICENSE-2.0"
|
|
||||||
distribution "repo"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
scm {
|
|
||||||
url = "https://github.com/spring-projects/spring-framework"
|
|
||||||
connection = "scm:git:git://github.com/spring-projects/spring-framework"
|
|
||||||
developerConnection = "scm:git:git://github.com/spring-projects/spring-framework"
|
|
||||||
}
|
|
||||||
developers {
|
|
||||||
developer {
|
|
||||||
id = "jhoeller"
|
|
||||||
name = "Juergen Hoeller"
|
|
||||||
email = "jhoeller@pivotal.io"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
issueManagement {
|
|
||||||
system = "GitHub"
|
|
||||||
url = "https://github.com/spring-projects/spring-framework/issues"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,4 +19,9 @@ dependencies {
|
||||||
testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
|
testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
|
||||||
testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
|
testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
|
||||||
testCompile("org.hibernate:hibernate-core:5.1.17.Final")
|
testCompile("org.hibernate:hibernate-core:5.1.17.Final")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Avoid publishing JAR to the artifact repository
|
||||||
|
if (pluginManager.hasPlugin("com.jfrog.artifactory")) {
|
||||||
|
artifactoryPublish.skip = true
|
||||||
|
}
|
||||||
|
|
|
@ -10,8 +10,8 @@ dependencies {
|
||||||
compile("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
|
compile("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Avoid publishing coroutines JAR to the artifact repository
|
// Avoid publishing JAR to the artifact repository
|
||||||
if (pluginManager.hasPlugin("artifactoryPublish")) {
|
if (pluginManager.hasPlugin("com.jfrog.artifactory")) {
|
||||||
artifactoryPublish.skip = true
|
artifactoryPublish.skip = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue