This commit updates the whole Spring Framework codebase to use JSpecify annotations instead of Spring null-safety annotations with JSR 305 semantics. JSpecify provides signficant enhancements such as properly defined specifications, a canonical dependency with no split-package issue, better tooling, better Kotlin integration and the capability to specify generic type, array and varargs element null-safety. Generic type null-safety is not defined by this commit yet and will be specified later. A key difference is that Spring null-safety annotations, following JSR 305 semantics, apply to fields, parameters and return values, while JSpecify annotations apply to type usages. That's why this commit moves nullability annotations closer to the type for fields and return values. See gh-28797
118 lines
4.4 KiB
Groovy
118 lines
4.4 KiB
Groovy
plugins {
|
|
id 'io.freefair.aspectj' version '8.4' apply false
|
|
// kotlinVersion is managed in gradle.properties
|
|
id 'org.jetbrains.kotlin.plugin.serialization' version "${kotlinVersion}" apply false
|
|
id 'org.jetbrains.dokka' version '1.9.20'
|
|
id 'com.github.ben-manes.versions' version '0.51.0'
|
|
id 'com.github.bjornvester.xjc' version '1.8.2' apply false
|
|
id 'de.undercouch.download' version '5.4.0'
|
|
id 'io.github.goooler.shadow' version '8.1.8' apply false
|
|
id 'me.champeau.jmh' version '0.7.2' apply false
|
|
id 'me.champeau.mrjar' version '0.1.1'
|
|
id "net.ltgt.errorprone" version "3.1.0" apply false
|
|
}
|
|
|
|
ext {
|
|
moduleProjects = subprojects.findAll { it.name.startsWith("spring-") }
|
|
javaProjects = subprojects.findAll { !it.name.startsWith("framework-") }
|
|
}
|
|
|
|
description = "Spring Framework"
|
|
|
|
configure(allprojects) { project ->
|
|
apply plugin: "org.springframework.build.localdev"
|
|
group = "org.springframework"
|
|
repositories {
|
|
mavenCentral()
|
|
maven {
|
|
url "https://repo.spring.io/milestone"
|
|
content {
|
|
// Netty 5 optional support
|
|
includeGroup 'io.projectreactor.netty'
|
|
}
|
|
}
|
|
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(allprojects - project(":framework-platform")) {
|
|
configurations {
|
|
dependencyManagement {
|
|
canBeConsumed = false
|
|
canBeResolved = false
|
|
visible = false
|
|
}
|
|
matching { it.name.endsWith("Classpath") }.all { it.extendsFrom(dependencyManagement) }
|
|
}
|
|
dependencies {
|
|
dependencyManagement(enforcedPlatform(dependencies.project(path: ":framework-platform")))
|
|
}
|
|
}
|
|
|
|
configure([rootProject] + javaProjects) { project ->
|
|
apply plugin: "java"
|
|
apply plugin: "java-test-fixtures"
|
|
apply plugin: 'org.springframework.build.conventions'
|
|
apply from: "${rootDir}/gradle/toolchains.gradle"
|
|
apply from: "${rootDir}/gradle/ide.gradle"
|
|
|
|
dependencies {
|
|
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")
|
|
// JSR-305 only used for non-required meta-annotations
|
|
compileOnly("com.google.code.findbugs:jsr305")
|
|
testCompileOnly("com.google.code.findbugs:jsr305")
|
|
}
|
|
|
|
ext.javadocLinks = [
|
|
"https://docs.oracle.com/en/java/javase/17/docs/api/",
|
|
"https://jakarta.ee/specifications/platform/11/apidocs/",
|
|
"https://docs.jboss.org/hibernate/orm/5.6/javadocs/",
|
|
"https://eclipse.dev/aspectj/doc/released/aspectj5rt-api",
|
|
"https://www.quartz-scheduler.org/api/2.3.0/",
|
|
"https://fasterxml.github.io/jackson-core/javadoc/2.14/",
|
|
"https://fasterxml.github.io/jackson-databind/javadoc/2.14/",
|
|
"https://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.14/",
|
|
"https://hc.apache.org/httpcomponents-client-5.4.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 execute Gradle with Java 18+.
|
|
// See https://github.com/spring-projects/spring-framework/issues/27497
|
|
//
|
|
// "https://junit.org/junit5/docs/5.11.4/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/",
|
|
// Previously there could be a split-package issue between JSR250 and JSR305 javax.annotation packages,
|
|
// but since 6.0 JSR 250 annotations such as @Resource and @PostConstruct have been replaced by their
|
|
// JakartaEE equivalents in the jakarta.annotation package.
|
|
//"https://www.javadoc.io/doc/com.google.code.findbugs/jsr305/3.0.2/",
|
|
"https://jspecify.dev/docs/api/"
|
|
] as String[]
|
|
}
|
|
|
|
configure(moduleProjects) { project ->
|
|
apply from: "${rootDir}/gradle/spring-module.gradle"
|
|
}
|