This commit introduces ProcessTestsAheadOfTimeCommand, a command-line application (CLI) that scans the provided classpath roots for Spring integration test classes and then generates AOT artifacts for those test classes in the provided output directories. This CLI is only intended to be used by build tools. Closes gh-28825
403 lines
15 KiB
Groovy
403 lines
15 KiB
Groovy
plugins {
|
|
id 'io.spring.dependency-management' version '1.0.12.RELEASE' apply false
|
|
id 'io.spring.nohttp' version '0.0.10'
|
|
id 'io.freefair.aspectj' version '6.5.0.3' apply false
|
|
id 'org.jetbrains.dokka' version '1.7.10' apply false
|
|
id 'org.jetbrains.kotlin.jvm' version '1.7.10' apply false
|
|
id 'org.jetbrains.kotlin.plugin.serialization' version '1.7.10' apply false
|
|
id 'org.asciidoctor.jvm.convert' version '3.3.2'
|
|
id 'org.asciidoctor.jvm.pdf' version '3.3.2'
|
|
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.6' apply false
|
|
}
|
|
|
|
ext {
|
|
moduleProjects = subprojects.findAll { it.name.startsWith("spring-") }
|
|
javaProjects = subprojects - project(":framework-bom")
|
|
withoutJclOverSlf4j = {
|
|
exclude group: "org.slf4j", name: "jcl-over-slf4j"
|
|
}
|
|
}
|
|
|
|
configure(allprojects) { project ->
|
|
apply plugin: "io.spring.dependency-management"
|
|
|
|
dependencyManagement {
|
|
imports {
|
|
mavenBom "com.fasterxml.jackson:jackson-bom:2.13.3"
|
|
mavenBom "io.netty:netty-bom:4.1.79.Final"
|
|
mavenBom "io.projectreactor:reactor-bom:2022.0.0-M4"
|
|
mavenBom "io.rsocket:rsocket-bom:1.1.2"
|
|
mavenBom "org.eclipse.jetty:jetty-bom:11.0.11"
|
|
mavenBom "org.jetbrains.kotlin:kotlin-bom:1.7.10"
|
|
mavenBom "org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.2"
|
|
mavenBom "org.jetbrains.kotlinx:kotlinx-serialization-bom:1.3.3"
|
|
mavenBom "org.junit:junit-bom:5.9.0"
|
|
}
|
|
dependencies {
|
|
dependencySet(group: 'org.apache.logging.log4j', version: '2.18.0') {
|
|
entry 'log4j-api'
|
|
entry 'log4j-core'
|
|
entry 'log4j-jul'
|
|
entry 'log4j-slf4j-impl'
|
|
}
|
|
dependency "org.slf4j:slf4j-api:1.7.36"
|
|
dependency("com.google.code.findbugs:findbugs:3.0.1") {
|
|
exclude group: "dom4j", name: "dom4j"
|
|
}
|
|
dependency "com.google.code.findbugs:jsr305:3.0.2"
|
|
|
|
dependencySet(group: 'org.aspectj', version: '1.9.9.1') {
|
|
entry 'aspectjrt'
|
|
entry 'aspectjtools'
|
|
entry 'aspectjweaver'
|
|
}
|
|
dependencySet(group: 'org.apache.groovy', version: '4.0.2') {
|
|
entry 'groovy'
|
|
entry 'groovy-jsr223'
|
|
entry 'groovy-templates' // requires findbugs for warning-free compilation
|
|
entry 'groovy-xml'
|
|
}
|
|
|
|
dependency "io.reactivex.rxjava3:rxjava:3.1.4"
|
|
dependency "io.smallrye.reactive:mutiny:1.4.0"
|
|
dependency "io.projectreactor.tools:blockhound:1.0.6.RELEASE"
|
|
dependency "io.r2dbc:r2dbc-spi:1.0.0.RELEASE"
|
|
dependency "io.r2dbc:r2dbc-spi-test:1.0.0.RELEASE"
|
|
dependency "io.r2dbc:r2dbc-h2:1.0.0.RC1"
|
|
|
|
dependency "com.fasterxml:aalto-xml:1.3.1"
|
|
dependency("com.fasterxml.woodstox:woodstox-core:6.3.0") {
|
|
exclude group: "stax", name: "stax-api"
|
|
}
|
|
dependency "com.google.code.gson:gson:2.9.0"
|
|
dependency "com.google.protobuf:protobuf-java-util:3.21.2"
|
|
dependency "com.googlecode.protobuf-java-format:protobuf-java-format:1.4"
|
|
dependency "com.thoughtworks.qdox:qdox:2.0.1"
|
|
dependency("com.thoughtworks.xstream:xstream:1.4.19") {
|
|
exclude group: "xpp3", name: "xpp3_min"
|
|
exclude group: "xmlpull", name: "xmlpull"
|
|
}
|
|
dependency "org.eclipse:yasson:2.0.4"
|
|
dependency("org.codehaus.jettison:jettison:1.3.8") {
|
|
exclude group: "stax", name: "stax-api"
|
|
}
|
|
dependency "org.ogce:xpp3:1.1.6"
|
|
dependency "org.yaml:snakeyaml:1.30"
|
|
|
|
dependency "com.h2database:h2:2.1.214"
|
|
dependency "com.github.ben-manes.caffeine:caffeine:3.1.1"
|
|
dependency "com.github.librepdf:openpdf:1.3.29"
|
|
dependency "com.rometools:rome:1.18.0"
|
|
dependency "commons-io:commons-io:2.11.0"
|
|
dependency "info.picocli:picocli:4.6.3"
|
|
dependency "io.vavr:vavr:0.10.4"
|
|
dependency "net.sf.jopt-simple:jopt-simple:5.0.4"
|
|
dependencySet(group: 'org.apache.activemq', version: '5.16.2') {
|
|
entry 'activemq-broker'
|
|
entry('activemq-kahadb-store') {
|
|
exclude group: "org.springframework", name: "spring-context"
|
|
}
|
|
entry 'activemq-stomp'
|
|
}
|
|
dependency "org.apache.commons:commons-pool2:2.9.0"
|
|
dependencySet(group: 'org.apache.derby', version: '10.14.2.0') {
|
|
entry 'derby'
|
|
entry 'derbyclient'
|
|
}
|
|
dependency "org.apache.poi:poi-ooxml:5.2.2"
|
|
dependency "org.apache-extras.beanshell:bsh:2.0b6"
|
|
dependency "org.freemarker:freemarker:2.3.31"
|
|
dependency "org.hsqldb:hsqldb:2.5.2"
|
|
dependency "org.quartz-scheduler:quartz:2.3.2"
|
|
dependency "org.ehcache:jcache:1.0.1"
|
|
dependency "org.ehcache:ehcache:3.4.0"
|
|
dependency "org.hibernate:hibernate-core-jakarta:5.6.10.Final"
|
|
dependency "org.hibernate:hibernate-validator:7.0.4.Final"
|
|
dependency "org.webjars:webjars-locator-core:0.48"
|
|
dependency "org.webjars:underscorejs:1.8.3"
|
|
|
|
dependencySet(group: 'org.apache.tomcat', version: '10.0.22') {
|
|
entry 'tomcat-util'
|
|
entry('tomcat-websocket') {
|
|
exclude group: "org.apache.tomcat", name: "tomcat-servlet-api"
|
|
exclude group: "org.apache.tomcat", name: "tomcat-websocket-api"
|
|
}
|
|
}
|
|
dependencySet(group: 'org.apache.tomcat.embed', version: '10.0.22') {
|
|
entry 'tomcat-embed-core'
|
|
entry 'tomcat-embed-websocket'
|
|
}
|
|
dependencySet(group: 'io.undertow', version: '2.2.18.Final') {
|
|
entry 'undertow-core'
|
|
entry 'undertow-servlet-jakarta'
|
|
entry 'undertow-websockets-jsr-jakarta'
|
|
}
|
|
|
|
dependency "org.eclipse.jetty:jetty-reactive-httpclient:3.0.6"
|
|
dependency 'org.apache.httpcomponents.client5:httpclient5:5.1.3'
|
|
dependency 'org.apache.httpcomponents.core5:httpcore5-reactive:5.1.3'
|
|
dependency("org.apache.httpcomponents:httpclient:4.5.13") {
|
|
exclude group: "commons-logging", name: "commons-logging"
|
|
}
|
|
dependencySet(group: 'com.squareup.okhttp3', version: '3.14.9') {
|
|
entry 'okhttp'
|
|
entry 'mockwebserver'
|
|
}
|
|
|
|
dependency "org.jruby:jruby:9.3.4.0"
|
|
dependency "org.python:jython-standalone:2.7.1"
|
|
dependency "org.mozilla:rhino:1.7.11"
|
|
|
|
dependency("org.dom4j:dom4j:2.1.3") {
|
|
exclude group: 'javax.xml.bind', name: "jaxb-api"
|
|
exclude group: "jaxen", name: "jaxen"
|
|
exclude group: "net.java.dev.msv", name: "xsdlib"
|
|
exclude group: "pull-parser", name: "pull-parser"
|
|
exclude group: "xpp3", name: "xpp3"
|
|
}
|
|
dependency("jaxen:jaxen:1.2.0") {
|
|
exclude group: "dom4j", name: "dom4j"
|
|
}
|
|
|
|
dependency("junit:junit:4.13.2") {
|
|
exclude group: "org.hamcrest", name: "hamcrest-core"
|
|
}
|
|
dependency("de.bechte.junit:junit-hierarchicalcontextrunner:4.12.1") {
|
|
exclude group: "junit", name: "junit"
|
|
}
|
|
dependency "org.testng:testng:7.6.1"
|
|
dependency "org.junit.support:testng-engine:1.0.4"
|
|
dependency "org.hamcrest:hamcrest:2.2"
|
|
dependency "org.awaitility:awaitility:3.1.6"
|
|
dependency "org.assertj:assertj-core:3.23.1"
|
|
dependencySet(group: 'org.xmlunit', version: '2.9.0') {
|
|
entry 'xmlunit-assertj'
|
|
entry('xmlunit-matchers') {
|
|
exclude group: "org.hamcrest", name: "hamcrest-core"
|
|
}
|
|
}
|
|
dependencySet(group: 'org.mockito', version: '4.6.1') {
|
|
entry('mockito-core') {
|
|
exclude group: "org.hamcrest", name: "hamcrest-core"
|
|
}
|
|
entry 'mockito-junit-jupiter'
|
|
}
|
|
dependency "io.mockk:mockk:1.12.1"
|
|
|
|
dependency("net.sourceforge.htmlunit:htmlunit:2.63.0") {
|
|
exclude group: "commons-logging", name: "commons-logging"
|
|
}
|
|
dependency("org.seleniumhq.selenium:htmlunit-driver:2.63.0") {
|
|
exclude group: "commons-logging", name: "commons-logging"
|
|
}
|
|
dependency("org.seleniumhq.selenium:selenium-java:3.141.59") {
|
|
exclude group: "commons-logging", name: "commons-logging"
|
|
exclude group: "io.netty", name: "netty"
|
|
}
|
|
dependency "org.skyscreamer:jsonassert:1.5.0"
|
|
dependency "com.jayway.jsonpath:json-path:2.6.0"
|
|
dependency "org.bouncycastle:bcpkix-jdk18on:1.71"
|
|
|
|
dependency "javax.cache:cache-api:1.1.1"
|
|
dependency "javax.money:money-api:1.1"
|
|
dependency "org.javamoney:moneta:1.4.2"
|
|
|
|
dependency "jakarta.activation:jakarta.activation-api:2.0.1"
|
|
dependency "jakarta.annotation:jakarta.annotation-api:2.0.0"
|
|
dependency "jakarta.ejb:jakarta.ejb-api:4.0.0"
|
|
dependency "jakarta.el:jakarta.el-api:4.0.0"
|
|
dependency "jakarta.enterprise.concurrent:jakarta.enterprise.concurrent-api:2.0.0"
|
|
dependency "jakarta.faces:jakarta.faces-api:3.0.0"
|
|
dependency "jakarta.inject:jakarta.inject-api:2.0.0"
|
|
dependency "jakarta.inject:jakarta.inject-tck:2.0.1"
|
|
dependency "jakarta.interceptor:jakarta.interceptor-api:2.0.0"
|
|
dependency "jakarta.jms:jakarta.jms-api:3.0.0"
|
|
dependency "jakarta.json:jakarta.json-api:2.0.1"
|
|
dependency "jakarta.json.bind:jakarta.json.bind-api:2.0.0"
|
|
dependency "jakarta.mail:jakarta.mail-api:2.0.1"
|
|
dependency "jakarta.persistence:jakarta.persistence-api:3.0.0"
|
|
dependency "jakarta.resource:jakarta.resource-api:2.0.0"
|
|
dependency "jakarta.servlet:jakarta.servlet-api:5.0.0"
|
|
dependency "jakarta.servlet.jsp:jakarta.servlet.jsp-api:3.0.0"
|
|
dependency "jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:2.0.0"
|
|
dependency "jakarta.transaction:jakarta.transaction-api:2.0.0"
|
|
dependency "jakarta.validation:jakarta.validation-api:3.0.0"
|
|
dependency "jakarta.websocket:jakarta.websocket-api:2.0.0"
|
|
dependency "jakarta.xml.bind:jakarta.xml.bind-api:3.0.1"
|
|
|
|
dependency "com.sun.activation:jakarta.activation:2.0.1"
|
|
dependency "com.sun.mail:jakarta.mail:2.0.1"
|
|
dependencySet(group: 'com.sun.xml.bind', version: '3.0.2') {
|
|
entry 'jaxb-core'
|
|
entry 'jaxb-impl'
|
|
entry 'jaxb-xjc'
|
|
}
|
|
|
|
// Substitute for "javax.management:jmxremote_optional:1.0.1_04" which
|
|
// is not available on Maven Central
|
|
dependency "org.glassfish.external:opendmk_jmxremote_optional_jar:1.0-b01-ea"
|
|
dependency "org.glassfish:jakarta.el:4.0.2"
|
|
dependency "org.glassfish.tyrus:tyrus-container-servlet:2.0.1"
|
|
dependency "org.eclipse.persistence:org.eclipse.persistence.jpa:3.0.2"
|
|
|
|
dependency "org.graalvm.nativeimage:svm:22.1.0.1"
|
|
}
|
|
generatedPomCustomization {
|
|
enabled = false
|
|
}
|
|
resolutionStrategy {
|
|
cacheChangingModulesFor 0, "seconds"
|
|
}
|
|
repositories {
|
|
mavenCentral()
|
|
maven { url "https://repo.spring.io/libs-spring-framework-build" }
|
|
maven { url "https://repo.spring.io/milestone" } // temporarily for context-propagation via Reactor Netty
|
|
}
|
|
}
|
|
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.compile'
|
|
apply from: "${rootDir}/gradle/toolchains.gradle"
|
|
apply from: "${rootDir}/gradle/ide.gradle"
|
|
|
|
pluginManager.withPlugin("kotlin") {
|
|
apply plugin: "org.jetbrains.dokka"
|
|
apply from: "${rootDir}/gradle/docs-dokka.gradle"
|
|
|
|
compileKotlin {
|
|
kotlinOptions {
|
|
languageVersion = "1.7"
|
|
apiVersion = "1.7"
|
|
freeCompilerArgs = ["-Xjsr305=strict", "-Xsuppress-version-warnings", "-opt-in=kotlin.RequiresOptIn"]
|
|
allWarningsAsErrors = true
|
|
}
|
|
}
|
|
compileTestKotlin {
|
|
kotlinOptions {
|
|
freeCompilerArgs = ["-Xjsr305=strict", "-opt-in=kotlin.RequiresOptIn"]
|
|
}
|
|
}
|
|
}
|
|
|
|
test {
|
|
useJUnitPlatform()
|
|
include(["**/*Tests.class", "**/*Test.class"])
|
|
systemProperty("java.awt.headless", "true")
|
|
systemProperty("testGroups", project.properties.get("testGroups"))
|
|
systemProperty("io.netty.leakDetection.level", "paranoid")
|
|
}
|
|
|
|
checkstyle {
|
|
toolVersion = "10.3.1"
|
|
configDirectory.set(rootProject.file("src/checkstyle"))
|
|
}
|
|
|
|
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")
|
|
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.1.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.0/api/ are in named modules.
|
|
//
|
|
// "https://junit.org/junit5/docs/5.9.0/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: "kotlin"
|
|
apply plugin: "io.spring.nohttp"
|
|
apply plugin: 'org.springframework.build.api-diff'
|
|
apply from: "${rootDir}/gradle/publications.gradle"
|
|
apply from: "${rootDir}/gradle/docs.gradle"
|
|
|
|
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" }
|
|
}
|
|
}
|
|
|
|
publishing {
|
|
publications {
|
|
mavenJava(MavenPublication) {
|
|
artifact docsZip
|
|
artifact schemaZip
|
|
artifact distZip
|
|
}
|
|
}
|
|
}
|
|
}
|