mirror of
https://github.com/spring-projects/spring-framework.git
synced 2026-10-03 21:49:03 +00:00
This commit moves the existing "test sources" Gradle plugin from Groovy to Java and updates the "buildSrc" build file to prepare for additional plugins in the Spring Framework build. The plugin itself looks, for a given Spring Framework module, at all the project dependencies for the following scopes: "compile", "testCompile", "api", "implementation" and "optional" (to be supported by a different plugin). See gh-23282
347 lines
12 KiB
Groovy
347 lines
12 KiB
Groovy
buildscript {
|
|
repositories {
|
|
maven { url "https://repo.spring.io/plugins-release" }
|
|
}
|
|
dependencies {
|
|
classpath("io.spring.gradle:propdeps-plugin:0.0.9.RELEASE")
|
|
classpath("io.spring.nohttp:nohttp-gradle:0.0.3.RELEASE")
|
|
classpath("org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16")
|
|
classpath("io.spring.asciidoctor:spring-asciidoctor-extensions:0.1.3.RELEASE")
|
|
}
|
|
}
|
|
|
|
// 3rd party plugin repositories can be configured in settings.gradle
|
|
plugins {
|
|
id 'org.springframework.build.test-sources' apply false
|
|
id "io.spring.dependency-management" version "1.0.7.RELEASE" apply false
|
|
id "org.jetbrains.kotlin.jvm" version "1.3.41" apply false
|
|
id "org.jetbrains.dokka" version "0.9.18"
|
|
id "org.asciidoctor.convert" version "1.5.8"
|
|
}
|
|
|
|
ext {
|
|
linkHomepage = "https://spring.io/projects/spring-framework"
|
|
linkCi = "https://build.spring.io/browse/SPR"
|
|
linkIssue = "https://github.com/spring-projects/spring-framework/issues"
|
|
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 != "spring-framework-bom") && (it.name != "spring-core-coroutines")
|
|
}
|
|
|
|
aspectjVersion = "1.9.4"
|
|
coroutinesVersion = "1.3.0-RC"
|
|
freemarkerVersion = "2.3.28"
|
|
groovyVersion = "2.5.7"
|
|
hsqldbVersion = "2.5.0"
|
|
jackson2Version = "2.9.9"
|
|
jettyVersion = "9.4.19.v20190610"
|
|
junit5Version = "5.5.1"
|
|
kotlinVersion = "1.3.41"
|
|
log4jVersion = "2.12.0"
|
|
nettyVersion = "4.1.38.Final"
|
|
reactorVersion = "Dysprosium-M3"
|
|
rsocketVersion = "1.0.0-RC2"
|
|
rxjavaVersion = "1.3.8"
|
|
rxjavaAdapterVersion = "1.2.1"
|
|
rxjava2Version = "2.2.10"
|
|
slf4jVersion = "1.7.26" // spring-jcl + consistent 3rd party deps
|
|
tiles3Version = "3.0.8"
|
|
tomcatVersion = "9.0.22"
|
|
undertowVersion = "2.0.23.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: "java"
|
|
apply plugin: "kotlin"
|
|
apply plugin: "checkstyle"
|
|
apply plugin: "propdeps"
|
|
apply plugin: 'org.springframework.build.test-sources'
|
|
apply plugin: "io.spring.dependency-management"
|
|
apply from: "${gradleScriptDir}/ide.gradle"
|
|
|
|
dependencyManagement {
|
|
resolutionStrategy {
|
|
cacheChangingModulesFor 0, "seconds"
|
|
}
|
|
applyMavenExclusions = false
|
|
generatedPomCustomization {
|
|
enabled = false
|
|
}
|
|
imports {
|
|
mavenBom "org.junit:junit-bom:${junit5Version}"
|
|
mavenBom "org.jetbrains.kotlin:kotlin-bom:${kotlinVersion}"
|
|
mavenBom "org.jetbrains.kotlinx:kotlinx-coroutines-bom:${coroutinesVersion}"
|
|
}
|
|
}
|
|
|
|
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 11 for testing
|
|
targetCompatibility = 1.8
|
|
options.encoding = "UTF-8"
|
|
}
|
|
|
|
compileTestJava {
|
|
sourceCompatibility = 1.8 // can be switched to 11 for testing
|
|
targetCompatibility = 1.8
|
|
options.encoding = "UTF-8"
|
|
options.compilerArgs += "-parameters"
|
|
}
|
|
|
|
compileKotlin {
|
|
kotlinOptions {
|
|
jvmTarget = "1.8"
|
|
freeCompilerArgs = ["-Xjsr305=strict"]
|
|
}
|
|
}
|
|
|
|
compileTestKotlin {
|
|
kotlinOptions {
|
|
jvmTarget = "1.8"
|
|
freeCompilerArgs = ["-Xjsr305=strict"]
|
|
}
|
|
}
|
|
|
|
test {
|
|
systemProperty("java.awt.headless", "true")
|
|
systemProperty("testGroups", project.properties.get("testGroups"))
|
|
systemProperty("io.netty.leakDetection.level", "paranoid")
|
|
useJUnitPlatform()
|
|
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", '**/*$*'])
|
|
}
|
|
|
|
checkstyle {
|
|
toolVersion = "8.23"
|
|
configDir = rootProject.file("src/checkstyle")
|
|
}
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
maven { url "https://repo.spring.io/libs-release" }
|
|
maven { url "https://repo.spring.io/milestone" } // Reactor
|
|
mavenLocal()
|
|
}
|
|
|
|
dependencies {
|
|
testCompile("junit:junit:4.13-beta-3") {
|
|
exclude group: "org.hamcrest", module: "hamcrest-core"
|
|
}
|
|
testCompile("org.mockito:mockito-core:3.0.0") {
|
|
exclude group: "org.hamcrest", module: "hamcrest-core"
|
|
}
|
|
testCompile("io.mockk:mockk:1.9.3")
|
|
testCompile("org.hamcrest:hamcrest-all:1.3")
|
|
testCompile("org.assertj:assertj-core:3.13.1")
|
|
// Pull in the latest JUnit 5 Launcher API and the Vintage engine as well
|
|
// so that we can run JUnit 4 tests in IDEs.
|
|
testRuntime("org.junit.platform:junit-platform-launcher")
|
|
testRuntime("org.junit.vintage:junit-vintage-engine")
|
|
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")
|
|
checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.7")
|
|
}
|
|
|
|
ext.javadocLinks = [
|
|
"https://docs.oracle.com/javase/8/docs/api/",
|
|
"https://docs.oracle.com/javaee/7/api/",
|
|
"https://docs.oracle.com/cd/E13222_01/wls/docs90/javadocs/", // CommonJ
|
|
"https://www.ibm.com/support/knowledgecenter/SS7JFU_8.5.5/com.ibm.websphere.javadoc.doc/web/apidocs/",
|
|
"https://glassfish.java.net/nonav/docs/v3/api/",
|
|
"https://docs.jboss.org/jbossas/javadoc/4.0.5/connector/",
|
|
"https://docs.jboss.org/jbossas/javadoc/7.1.2.Final/",
|
|
"https://tiles.apache.org/tiles-request/apidocs/",
|
|
"https://tiles.apache.org/framework/apidocs/",
|
|
"https://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/",
|
|
"https://www.ehcache.org/apidocs/2.10.4",
|
|
"https://www.quartz-scheduler.org/api/2.3.0/",
|
|
"https://fasterxml.github.io/jackson-core/javadoc/2.9/",
|
|
"https://fasterxml.github.io/jackson-databind/javadoc/2.9/",
|
|
"https://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.9/",
|
|
"https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/",
|
|
"https://junit.org/junit4/javadoc/4.12/",
|
|
"https://junit.org/junit5/docs/${junit5Version}/api/"
|
|
] as String[]
|
|
}
|
|
|
|
configure(subprojects.findAll { (it.name != "spring-core-coroutines") } ) { 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.encoding = "UTF-8"
|
|
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 plugin: "io.spring.nohttp"
|
|
apply from: "${gradleScriptDir}/jdiff.gradle"
|
|
apply from: "${gradleScriptDir}/docs.gradle"
|
|
|
|
nohttp {
|
|
source.exclude "**/test-output/**"
|
|
whitelistFile = project.file("src/nohttp/whitelist.lines")
|
|
def projectDirURI = project.projectDir.toURI()
|
|
allprojects.forEach { p ->
|
|
def outURI = p.file("out").toURI()
|
|
def pattern = projectDirURI.relativize(outURI).path + "**"
|
|
source.exclude pattern
|
|
}
|
|
}
|
|
|
|
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.1")
|
|
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.17.Final")
|
|
asciidoctor("io.spring.asciidoctor:spring-asciidoctor-extensions:0.1.3.RELEASE")
|
|
}
|
|
|
|
artifacts {
|
|
archives docsZip
|
|
archives schemaZip
|
|
archives distZip
|
|
}
|
|
|
|
wrapper {
|
|
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
|
|
}
|