提交 7ce1f5e6 编写于 作者: B Brian Clozel

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
上级 03701018
...@@ -45,7 +45,7 @@ ext { ...@@ -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) { ...@@ -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) { ...@@ -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
}
}
} }
} }
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
}
}
}
\ No newline at end of file
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>
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"
}
}
}
}
}
\ No newline at end of file
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) { ...@@ -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 { ...@@ -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")
} }
\ No newline at end of file
// Avoid publishing JAR to the artifact repository
if (pluginManager.hasPlugin("com.jfrog.artifactory")) {
artifactoryPublish.skip = true
}
...@@ -10,8 +10,8 @@ dependencies { ...@@ -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
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册