Prior to this commit, the generated POMs for Spring Framework modules would contain unneeded/harmful information from the Spring Framework build: 1. The BOM imports applied to each module by the dependency management plugin, for example for Netty or Reactor Netty. Spring should not export that opinion to its POMs. 2. The exclusion of "org.slf4:jcl-over-slf4j" from *all* dependencies, which made the POMs much larger than necessary and suggested to developers that they should exclude it as well when using all those listed dependencies. In fact, only Apache Tiles currently brings that transitively. This commit removes that information from the POMs. The dependencyManagement Gradle plugin is disabled for POM generation and we manually resolve the dependency versions during the generation phase. The Gradle build is streamlined to exclude "org.slf4:jcl-over-slf4j" only when necessary. Issue: SPR-16893
318 lines
10 KiB
Groovy
318 lines
10 KiB
Groovy
buildscript {
|
|
repositories {
|
|
maven { url "https://repo.spring.io/plugins-release" }
|
|
}
|
|
dependencies {
|
|
classpath("io.spring.gradle:propdeps-plugin:0.0.9.RELEASE")
|
|
classpath("org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16")
|
|
}
|
|
}
|
|
|
|
// 3rd party plugin repositories can be configured in settings.gradle
|
|
plugins {
|
|
id "io.spring.dependency-management" version "1.0.5.RELEASE" apply false
|
|
id "org.jetbrains.kotlin.jvm" version "1.2.41" apply false
|
|
id "org.jetbrains.dokka" version "0.9.17"
|
|
id "org.asciidoctor.convert" version "1.5.7"
|
|
}
|
|
|
|
ext {
|
|
linkHomepage = 'https://projects.spring.io/spring-framework'
|
|
linkCi = 'https://build.spring.io/browse/SPR'
|
|
linkIssue = 'https://jira.spring.io/browse/SPR'
|
|
linkScmUrl = 'https://github.com/spring-projects/spring-framework'
|
|
linkScmConnection = 'scm:git:git://github.com/spring-projects/spring-framework.git'
|
|
linkScmDevConnection = 'scm:git:ssh://git@github.com:spring-projects/spring-framework.git'
|
|
|
|
moduleProjects = subprojects.findAll {
|
|
!it.name.equals('spring-build-src') && !it.name.equals('spring-framework-bom')
|
|
}
|
|
|
|
aspectjVersion = "1.9.1"
|
|
freemarkerVersion = "2.3.28"
|
|
groovyVersion = "2.5.0"
|
|
hsqldbVersion = "2.4.1"
|
|
jackson2Version = "2.9.5"
|
|
jettyVersion = "9.4.11.v20180605"
|
|
junitPlatformVersion = "1.2.0"
|
|
junitJupiterVersion = "5.2.0"
|
|
junitVintageVersion = "5.2.0"
|
|
kotlinVersion = "1.2.41"
|
|
log4jVersion = "2.11.0"
|
|
nettyVersion = "4.1.25.Final"
|
|
reactorVersion = "Californium-BUILD-SNAPSHOT"
|
|
rxjavaVersion = "1.3.8"
|
|
rxjavaAdapterVersion = "1.2.1"
|
|
rxjava2Version = "2.1.14"
|
|
slf4jVersion = "1.7.25" // spring-jcl + consistent 3rd party deps
|
|
tiles3Version = "3.0.8"
|
|
tomcatVersion = "9.0.8"
|
|
undertowVersion = "2.0.9.Final"
|
|
|
|
gradleScriptDir = "${rootProject.projectDir}/gradle"
|
|
withoutJclOverSlf4J = {
|
|
exclude group: "org.slf4j", module: "jcl-over-slf4j"
|
|
}
|
|
}
|
|
|
|
configure(allprojects) { project ->
|
|
group = "org.springframework"
|
|
version = qualifyVersionIfNecessary(version)
|
|
|
|
apply plugin: "propdeps"
|
|
apply plugin: "java"
|
|
apply plugin: "test-source-set-dependencies"
|
|
apply plugin: "io.spring.dependency-management"
|
|
apply from: "${gradleScriptDir}/ide.gradle"
|
|
|
|
dependencyManagement {
|
|
resolutionStrategy {
|
|
cacheChangingModulesFor 0, 'seconds'
|
|
}
|
|
applyMavenExclusions = false
|
|
generatedPomCustomization {
|
|
enabled = false
|
|
}
|
|
}
|
|
|
|
apply plugin: "kotlin"
|
|
compileKotlin {
|
|
kotlinOptions {
|
|
jvmTarget = "1.8"
|
|
freeCompilerArgs = ["-Xjsr305=strict"]
|
|
apiVersion = "1.1"
|
|
languageVersion = "1.1"
|
|
}
|
|
}
|
|
compileTestKotlin {
|
|
kotlinOptions {
|
|
jvmTarget = "1.8"
|
|
freeCompilerArgs = ["-Xjsr305=strict"]
|
|
}
|
|
}
|
|
|
|
configurations.all {
|
|
// Check for updates every build
|
|
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
|
|
|
|
// Consistent slf4j version (e.g. clashes between slf4j versions)
|
|
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
|
|
if (details.requested.group == 'org.slf4j') {
|
|
details.useVersion slf4jVersion
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
def commonCompilerArgs =
|
|
["-Xlint:serial", "-Xlint:cast", "-Xlint:classfile", "-Xlint:dep-ann",
|
|
"-Xlint:divzero", "-Xlint:empty", "-Xlint:finally", "-Xlint:overrides",
|
|
"-Xlint:path", "-Xlint:processing", "-Xlint:static", "-Xlint:try", "-Xlint:-options"]
|
|
|
|
compileJava.options*.compilerArgs = commonCompilerArgs +
|
|
["-Xlint:varargs", "-Xlint:fallthrough", "-Xlint:rawtypes",
|
|
"-Xlint:deprecation", "-Xlint:unchecked", "-Werror"]
|
|
|
|
compileTestJava.options*.compilerArgs = commonCompilerArgs +
|
|
["-Xlint:-varargs", "-Xlint:-fallthrough","-Xlint:-rawtypes",
|
|
"-Xlint:-deprecation", "-Xlint:-unchecked"]
|
|
|
|
compileJava {
|
|
sourceCompatibility = 1.8 // can be switched to 10 for testing
|
|
targetCompatibility = 1.8
|
|
options.encoding = 'UTF-8'
|
|
}
|
|
|
|
compileTestJava {
|
|
sourceCompatibility = 1.8 // can be switched to 10 for testing
|
|
targetCompatibility = 1.8
|
|
options.encoding = 'UTF-8'
|
|
options.compilerArgs += "-parameters"
|
|
}
|
|
|
|
test {
|
|
systemProperty("java.awt.headless", "true")
|
|
systemProperty("testGroups", project.properties.get("testGroups"))
|
|
scanForTestClasses = false
|
|
include(["**/*Tests.class", "**/*Test.class"])
|
|
// Since we set scanForTestClasses to false, we need to filter out inner
|
|
// classes with the "$" pattern; otherwise, using -Dtest.single=MyTests to
|
|
// run MyTests by itself will fail if MyTests contains any inner classes.
|
|
exclude(["**/Abstract*.class", '**/*$*'])
|
|
reports.junitXml.setDestination(file("$buildDir/test-results"))
|
|
}
|
|
|
|
repositories {
|
|
maven { url "https://repo.spring.io/libs-release" }
|
|
maven { url "https://repo.spring.io/snapshot" } // for Reactor
|
|
}
|
|
|
|
dependencies {
|
|
testCompile("junit:junit:4.12") {
|
|
exclude group:'org.hamcrest', module:'hamcrest-core'
|
|
}
|
|
testCompile("org.mockito:mockito-core:2.18.0") {
|
|
exclude group:'org.hamcrest', module:'hamcrest-core'
|
|
}
|
|
testCompile("com.nhaarman:mockito-kotlin:1.5.0") {
|
|
exclude module:'kotlin-stdlib'
|
|
exclude module:'kotlin-reflect'
|
|
exclude module:'mockito-core'
|
|
}
|
|
testCompile("org.hamcrest:hamcrest-all:1.3")
|
|
testRuntime("org.apache.logging.log4j:log4j-core:${log4jVersion}")
|
|
testRuntime("org.apache.logging.log4j:log4j-slf4j-impl:${log4jVersion}")
|
|
testRuntime("org.apache.logging.log4j:log4j-jul:${log4jVersion}")
|
|
// JSR-305 only used for non-required meta-annotations
|
|
compileOnly("com.google.code.findbugs:jsr305:3.0.2")
|
|
testCompileOnly("com.google.code.findbugs:jsr305:3.0.2")
|
|
}
|
|
|
|
ext.javadocLinks = [
|
|
"http://docs.oracle.com/javase/8/docs/api/",
|
|
"http://docs.oracle.com/javaee/7/api/",
|
|
"http://docs.oracle.com/cd/E13222_01/wls/docs90/javadocs/", // CommonJ
|
|
"http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.javadoc.doc/web/apidocs/",
|
|
"http://glassfish.java.net/nonav/docs/v3/api/",
|
|
"http://docs.jboss.org/jbossas/javadoc/4.0.5/connector/",
|
|
"http://docs.jboss.org/jbossas/javadoc/7.1.2.Final/",
|
|
"http://tiles.apache.org/tiles-request/apidocs/",
|
|
"http://tiles.apache.org/framework/apidocs/",
|
|
"http://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/",
|
|
"http://ehcache.org/apidocs/2.10.4",
|
|
"http://quartz-scheduler.org/api/2.2.1/",
|
|
"http://fasterxml.github.io/jackson-core/javadoc/2.8/",
|
|
"http://fasterxml.github.io/jackson-databind/javadoc/2.8/",
|
|
"http://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.8/",
|
|
"http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/"
|
|
] as String[]
|
|
}
|
|
|
|
configure(subprojects - project(":spring-build-src")) { subproject ->
|
|
apply from: "${gradleScriptDir}/publish-maven.gradle"
|
|
|
|
jar {
|
|
manifest.attributes["Implementation-Title"] = subproject.name
|
|
manifest.attributes["Implementation-Version"] = subproject.version
|
|
manifest.attributes["Automatic-Module-Name"] = subproject.name.replace('-', '.') // for Jigsaw
|
|
manifest.attributes["Created-By"] =
|
|
"${System.getProperty("java.version")} (${System.getProperty("java.specification.vendor")})"
|
|
|
|
from("${rootProject.projectDir}/src/docs/dist") {
|
|
include "license.txt"
|
|
include "notice.txt"
|
|
into "META-INF"
|
|
expand(copyright: new Date().format("yyyy"), version: project.version)
|
|
}
|
|
}
|
|
|
|
javadoc {
|
|
description = "Generates project-level javadoc for use in -javadoc jar"
|
|
|
|
options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
|
|
options.author = true
|
|
options.header = project.name
|
|
options.use = true
|
|
options.links(project.ext.javadocLinks)
|
|
options.addStringOption('Xdoclint:none', '-quiet')
|
|
|
|
// Suppress warnings due to cross-module @see and @link references.
|
|
// Note that global 'api' task does display all warnings.
|
|
logging.captureStandardError LogLevel.INFO
|
|
logging.captureStandardOutput LogLevel.INFO // suppress "## warnings" message
|
|
}
|
|
|
|
task sourcesJar(type: Jar, dependsOn: classes) {
|
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
|
classifier = 'sources'
|
|
from sourceSets.main.allSource
|
|
// Don't include or exclude anything explicitly by default. See SPR-12085.
|
|
}
|
|
|
|
task javadocJar(type: Jar) {
|
|
classifier = "javadoc"
|
|
from javadoc
|
|
}
|
|
|
|
artifacts {
|
|
archives sourcesJar
|
|
archives javadocJar
|
|
}
|
|
}
|
|
|
|
configure(rootProject) {
|
|
description = "Spring Framework"
|
|
|
|
apply plugin: "groovy"
|
|
apply from: "${gradleScriptDir}/jdiff.gradle"
|
|
apply from: "${gradleScriptDir}/docs.gradle"
|
|
|
|
dependencyManagement {
|
|
imports {
|
|
mavenBom "io.projectreactor:reactor-bom:${reactorVersion}"
|
|
}
|
|
}
|
|
|
|
// don't publish the default jar for the root project
|
|
configurations.archives.artifacts.clear()
|
|
|
|
dependencies { // for integration tests
|
|
testCompile(project(":spring-aop"))
|
|
testCompile(project(":spring-beans"))
|
|
testCompile(project(":spring-context"))
|
|
testCompile(project(":spring-core"))
|
|
testCompile(project(":spring-expression"))
|
|
testCompile(project(":spring-jdbc"))
|
|
testCompile(project(":spring-orm"))
|
|
testCompile(project(":spring-test"))
|
|
testCompile(project(":spring-tx"))
|
|
testCompile(project(":spring-web"))
|
|
testCompile("javax.inject:javax.inject:1")
|
|
testCompile("javax.resource:javax.resource-api:1.7")
|
|
testCompile("javax.servlet:javax.servlet-api:3.1.0")
|
|
testCompile("org.aspectj:aspectjweaver:${aspectjVersion}")
|
|
testCompile("org.hsqldb:hsqldb:${hsqldbVersion}")
|
|
testCompile("org.hibernate:hibernate-core:5.1.14.Final")
|
|
}
|
|
|
|
artifacts {
|
|
archives docsZip
|
|
archives schemaZip
|
|
archives distZip
|
|
}
|
|
|
|
wrapper {
|
|
description = "Generates gradlew[.bat] scripts"
|
|
gradleVersion = '4.8'
|
|
|
|
doLast() {
|
|
def gradleOpts = "-XX:MaxMetaspaceSize=1024m -Xmx1024m"
|
|
def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m"
|
|
File wrapperFile = file("gradlew")
|
|
wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=",
|
|
"GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=")
|
|
File wrapperBatFile = file("gradlew.bat")
|
|
wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=",
|
|
"set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=")
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
* Support publication of artifacts versioned by topic branch.
|
|
* CI builds supply `-P BRANCH_NAME=<TOPIC>` to gradle at build time.
|
|
* If <TOPIC> starts with 'SPR-', change version
|
|
* from BUILD-SNAPSHOT => <TOPIC>-SNAPSHOT
|
|
* e.g. 3.2.1.BUILD-SNAPSHOT => 3.2.1.SPR-1234-SNAPSHOT
|
|
*/
|
|
def qualifyVersionIfNecessary(version) {
|
|
if (rootProject.hasProperty("BRANCH_NAME")) {
|
|
def qualifier = rootProject.getProperty("BRANCH_NAME")
|
|
if (qualifier.startsWith("SPR-")) {
|
|
return version.replace('BUILD', qualifier)
|
|
}
|
|
}
|
|
return version
|
|
}
|