This commit moves mavenLocal() to the bottom of the repositories list so that Gradle's Eclipse IDE support will properly link binary JARs to their source JARS in generated Eclipse .classpath files. According to Gradle experts, "`mavenLocal` should basically never be the first repo in the list." https://github.com/eclipse/buildship/issues/655#issuecomment-366227296
317 lines
10 KiB
Groovy
317 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.3.21" apply false
|
|
id "org.jetbrains.dokka" version "0.9.17"
|
|
id "org.asciidoctor.convert" version "1.5.8"
|
|
}
|
|
|
|
ext {
|
|
linkHomepage = "https://projects.spring.io/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.equals("spring-build-src") && !it.name.equals("spring-framework-bom")
|
|
}
|
|
|
|
aspectjVersion = "1.9.2"
|
|
freemarkerVersion = "2.3.28"
|
|
groovyVersion = "2.5.6"
|
|
hsqldbVersion = "2.4.1"
|
|
jackson2Version = "2.9.8"
|
|
jettyVersion = "9.4.15.v20190215"
|
|
junit5Version = "5.4.0"
|
|
kotlinVersion = "1.3.21"
|
|
log4jVersion = "2.11.2"
|
|
nettyVersion = "4.1.33.Final"
|
|
reactorVersion = "Californium-SR5"
|
|
rxjavaVersion = "1.3.8"
|
|
rxjavaAdapterVersion = "1.2.1"
|
|
rxjava2Version = "2.2.6"
|
|
slf4jVersion = "1.7.25" // spring-jcl + consistent 3rd party deps
|
|
tiles3Version = "3.0.8"
|
|
tomcatVersion = "9.0.16"
|
|
undertowVersion = "2.0.18.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: "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
|
|
}
|
|
}
|
|
|
|
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")
|
|
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"))
|
|
}
|
|
|
|
checkstyle {
|
|
toolVersion = "8.17"
|
|
configDir = rootProject.file("src/checkstyle")
|
|
}
|
|
|
|
repositories {
|
|
maven { url "https://repo.spring.io/libs-release" }
|
|
maven { url "https://repo.spring.io/snapshot" } // Reactor
|
|
mavenLocal()
|
|
}
|
|
|
|
dependencies {
|
|
testCompile("junit:junit:4.12") {
|
|
exclude group: "org.hamcrest", module: "hamcrest-core"
|
|
}
|
|
testCompile("org.mockito:mockito-core:2.24.0") {
|
|
exclude group: "org.hamcrest", module: "hamcrest-core"
|
|
}
|
|
testCompile("io.mockk:mockk:1.9.1")
|
|
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")
|
|
checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.5")
|
|
}
|
|
|
|
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.9/",
|
|
"http://fasterxml.github.io/jackson-databind/javadoc/2.9/",
|
|
"http://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.9/",
|
|
"http://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 - 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.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")
|
|
}
|
|
|
|
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
|
|
}
|