178 lines
6.7 KiB
Groovy
178 lines
6.7 KiB
Groovy
plugins {
|
|
id 'io.spring.nohttp' version '0.0.10'
|
|
id 'io.freefair.aspectj' version '6.5.0.3' apply false
|
|
// kotlinVersion is managed in gradle.properties
|
|
id 'org.jetbrains.kotlin.plugin.serialization' version "${kotlinVersion}" apply false
|
|
id 'org.jetbrains.dokka' version '1.7.20'
|
|
id 'org.asciidoctor.jvm.convert' version '3.3.2' apply false
|
|
id 'org.asciidoctor.jvm.pdf' version '3.3.2' apply false
|
|
id 'org.unbroken-dome.xjc' version '2.0.0' apply false
|
|
id 'com.github.ben-manes.versions' version '0.42.0'
|
|
id 'com.github.johnrengelman.shadow' version '7.1.2' apply false
|
|
id 'de.undercouch.download' version '5.1.0'
|
|
id 'me.champeau.jmh' version '0.6.8' apply false
|
|
}
|
|
|
|
ext {
|
|
moduleProjects = subprojects.findAll { it.name.startsWith("spring-") }
|
|
javaProjects = subprojects - project(":framework-bom") - project(":framework-platform")
|
|
}
|
|
|
|
configure(allprojects) { project ->
|
|
repositories {
|
|
mavenCentral()
|
|
maven {
|
|
url "https://repo.spring.io/milestone"
|
|
content {
|
|
// Netty 5 optional support
|
|
includeGroup 'io.projectreactor.netty'
|
|
}
|
|
}
|
|
maven { url "https://repo.spring.io/libs-spring-framework-build" }
|
|
if (version.contains('-')) {
|
|
maven { url "https://repo.spring.io/milestone" }
|
|
}
|
|
if (version.endsWith('-SNAPSHOT')) {
|
|
maven { url "https://repo.spring.io/snapshot" }
|
|
}
|
|
}
|
|
configurations.all {
|
|
resolutionStrategy {
|
|
cacheChangingModulesFor 0, "seconds"
|
|
cacheDynamicVersionsFor 0, "seconds"
|
|
}
|
|
}
|
|
}
|
|
|
|
configure([rootProject] + javaProjects) { project ->
|
|
group = "org.springframework"
|
|
|
|
apply plugin: "java"
|
|
apply plugin: "java-test-fixtures"
|
|
apply plugin: "checkstyle"
|
|
apply plugin: 'org.springframework.build.conventions'
|
|
apply from: "${rootDir}/gradle/toolchains.gradle"
|
|
apply from: "${rootDir}/gradle/ide.gradle"
|
|
|
|
configurations {
|
|
dependencyManagement {
|
|
canBeConsumed = false
|
|
canBeResolved = false
|
|
visible = false
|
|
}
|
|
matching { it.name.endsWith("Classpath") }.all { it.extendsFrom(dependencyManagement) }
|
|
}
|
|
|
|
test {
|
|
useJUnitPlatform()
|
|
include(["**/*Tests.class", "**/*Test.class"])
|
|
systemProperty("java.awt.headless", "true")
|
|
systemProperty("testGroups", project.properties.get("testGroups"))
|
|
systemProperty("io.netty.leakDetection.level", "paranoid")
|
|
systemProperty("io.netty5.leakDetectionLevel", "paranoid")
|
|
systemProperty("io.netty5.leakDetection.targetRecords", "32")
|
|
systemProperty("io.netty5.buffer.lifecycleTracingEnabled", "true")
|
|
systemProperty("io.netty5.buffer.leakDetectionEnabled", "true")
|
|
jvmArgs(["--add-opens=java.base/java.lang=ALL-UNNAMED",
|
|
"--add-opens=java.base/java.util=ALL-UNNAMED"])
|
|
}
|
|
|
|
checkstyle {
|
|
toolVersion = "10.5.0"
|
|
configDirectory.set(rootProject.file("src/checkstyle"))
|
|
}
|
|
|
|
tasks.named("checkstyleMain").configure {
|
|
maxHeapSize = "1g"
|
|
}
|
|
|
|
tasks.named("checkstyleTest").configure {
|
|
maxHeapSize = "1g"
|
|
}
|
|
|
|
dependencies {
|
|
dependencyManagement(enforcedPlatform(dependencies.project(path: ":framework-platform")))
|
|
testImplementation("org.junit.jupiter:junit-jupiter-api")
|
|
testImplementation("org.junit.jupiter:junit-jupiter-params")
|
|
testImplementation("org.junit.platform:junit-platform-suite-api")
|
|
testImplementation("org.mockito:mockito-core")
|
|
testImplementation("org.mockito:mockito-junit-jupiter")
|
|
testImplementation("io.mockk:mockk")
|
|
testImplementation("org.assertj:assertj-core")
|
|
// Pull in the latest JUnit 5 Launcher API to ensure proper support in IDEs.
|
|
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
|
|
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
|
|
testRuntimeOnly("org.junit.platform:junit-platform-suite-engine")
|
|
testRuntimeOnly("org.apache.logging.log4j:log4j-core")
|
|
testRuntimeOnly("org.apache.logging.log4j:log4j-jul")
|
|
testRuntimeOnly("org.apache.logging.log4j:log4j-slf4j-impl")
|
|
// JSR-305 only used for non-required meta-annotations
|
|
compileOnly("com.google.code.findbugs:jsr305")
|
|
testCompileOnly("com.google.code.findbugs:jsr305")
|
|
checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.31")
|
|
}
|
|
|
|
ext.javadocLinks = [
|
|
"https://docs.oracle.com/en/java/javase/17/docs/api/",
|
|
"https://jakarta.ee/specifications/platform/9/apidocs/",
|
|
"https://docs.oracle.com/cd/E13222_01/wls/docs90/javadocs/", // CommonJ
|
|
"https://www.ibm.com/docs/api/v1/content/SSEQTP_8.5.5/com.ibm.websphere.javadoc.doc/web/apidocs/",
|
|
"https://docs.jboss.org/jbossas/javadoc/4.0.5/connector/",
|
|
"https://docs.jboss.org/jbossas/javadoc/7.1.2.Final/",
|
|
"https://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/",
|
|
"https://www.quartz-scheduler.org/api/2.3.0/",
|
|
"https://fasterxml.github.io/jackson-core/javadoc/2.10/",
|
|
"https://fasterxml.github.io/jackson-databind/javadoc/2.10/",
|
|
"https://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.10/",
|
|
"https://hc.apache.org/httpcomponents-client-5.2.x/current/httpclient5/apidocs/",
|
|
"https://projectreactor.io/docs/test/release/api/",
|
|
"https://junit.org/junit4/javadoc/4.13.2/",
|
|
// TODO Uncomment link to JUnit 5 docs once we have sorted out
|
|
// the following warning in the build.
|
|
//
|
|
// warning: The code being documented uses packages in the unnamed module, but the packages defined in https://junit.org/junit5/docs/5.9.1/api/ are in named modules.
|
|
//
|
|
// "https://junit.org/junit5/docs/5.9.1/api/",
|
|
"https://www.reactive-streams.org/reactive-streams-1.0.3-javadoc/",
|
|
"https://javadoc.io/static/io.rsocket/rsocket-core/1.1.1/",
|
|
"https://r2dbc.io/spec/1.0.0.RELEASE/api/",
|
|
// The external Javadoc link for JSR 305 must come last to ensure that types from
|
|
// JSR 250 (such as @PostConstruct) are still supported. This is due to the fact
|
|
// that JSR 250 and JSR 305 both define types in javax.annotation, which results
|
|
// in a split package, and the javadoc tool does not support split packages
|
|
// across multiple external Javadoc sites.
|
|
"https://www.javadoc.io/doc/com.google.code.findbugs/jsr305/3.0.2/"
|
|
] as String[]
|
|
}
|
|
|
|
configure(moduleProjects) { project ->
|
|
apply from: "${rootDir}/gradle/spring-module.gradle"
|
|
}
|
|
|
|
configure(rootProject) {
|
|
description = "Spring Framework"
|
|
|
|
apply plugin: "io.spring.nohttp"
|
|
apply plugin: 'org.springframework.build.api-diff'
|
|
|
|
nohttp {
|
|
source.exclude "**/test-output/**"
|
|
allowlistFile = project.file("src/nohttp/allowlist.lines")
|
|
def rootPath = file(rootDir).toPath()
|
|
def projectDirs = allprojects.collect { it.projectDir } + "${rootDir}/buildSrc"
|
|
projectDirs.forEach { dir ->
|
|
[ 'bin', 'build', 'out', '.settings' ]
|
|
.collect { rootPath.relativize(new File(dir, it).toPath()) }
|
|
.forEach { source.exclude "$it/**" }
|
|
[ '.classpath', '.project' ]
|
|
.collect { rootPath.relativize(new File(dir, it).toPath()) }
|
|
.forEach { source.exclude "$it" }
|
|
}
|
|
}
|
|
|
|
tasks.named("checkstyleNohttp").configure {
|
|
maxHeapSize = "1g"
|
|
}
|
|
|
|
}
|