|
|
|
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.8.20'
|
|
|
|
id 'org.unbroken-dome.xjc' version '2.0.0' apply false
|
|
|
|
id 'com.github.ben-manes.versions' version '0.49.0'
|
|
|
|
id 'com.github.johnrengelman.shadow' version '8.1.1' apply false
|
|
|
|
id 'de.undercouch.download' version '5.4.0'
|
|
|
|
id 'me.champeau.jmh' version '0.7.1' apply false
|
|
|
|
id 'me.champeau.mrjar' version '0.1.1'
|
|
|
|
}
|
|
|
|
|
|
|
|
ext {
|
|
|
|
moduleProjects = subprojects.findAll { it.name.startsWith("spring-") }
|
Stop publishing distribution zip artifact
Prior to this commit, the Spring Framework build would publish several
zip artifacts:
* a "*-schema.zip" containing all the XSD schemas produced
* a "*-docs.zip" containing the API docs
* a "*-dist.zip" containing all of the above, plus module jars
Since the reference docs are now produced by Antora in a separate
process, the "*-docs.zip" does not contain the reference docs anymore.
But it still contains the API docs which are automatically fetched from
the artifact repository and published on the docs.spring.io website.
This commit intends to update the current arrangement and optimize the
build.
First, the "*-dist.zip" is not published anymore, since it cannot be
consumed anyway by the community: repo.spring.io does not distribute
release artifacts publicly, developers are expected to get them from
Maven Central. This arrangement is quite dated anyway and is not really
useful in current application build setups.
The generation of API docs is moved to a new "framework-api" module,
separating it from the reference docs module ("framework-docs") which
contains Java, Kotlin and Asciidoctor sources. This removes the custom
javadoc aggregation task and instead uses a dedicated Gradle plugin.
This change also adds a new `-PskipDocs` Gradle project property that
skips entirely the documentation tasks (javadoc, kdocs) as well as the
"distrbution" tasks managed in the framework-api module.
This allows developers to publish locally a SNAPSHOT of Spring Framework
without creating the entire documentation distribution. This is
particularly useful for local testing.
For example, `$ ./gradlew pTML -PskipDocs`.
Closes gh-31049
1 year ago
|
|
|
javaProjects = subprojects.findAll { !it.name.startsWith("framework-") }
|
|
|
|
}
|
|
|
|
|
|
|
|
configure(allprojects) { project ->
|
Stop publishing distribution zip artifact
Prior to this commit, the Spring Framework build would publish several
zip artifacts:
* a "*-schema.zip" containing all the XSD schemas produced
* a "*-docs.zip" containing the API docs
* a "*-dist.zip" containing all of the above, plus module jars
Since the reference docs are now produced by Antora in a separate
process, the "*-docs.zip" does not contain the reference docs anymore.
But it still contains the API docs which are automatically fetched from
the artifact repository and published on the docs.spring.io website.
This commit intends to update the current arrangement and optimize the
build.
First, the "*-dist.zip" is not published anymore, since it cannot be
consumed anyway by the community: repo.spring.io does not distribute
release artifacts publicly, developers are expected to get them from
Maven Central. This arrangement is quite dated anyway and is not really
useful in current application build setups.
The generation of API docs is moved to a new "framework-api" module,
separating it from the reference docs module ("framework-docs") which
contains Java, Kotlin and Asciidoctor sources. This removes the custom
javadoc aggregation task and instead uses a dedicated Gradle plugin.
This change also adds a new `-PskipDocs` Gradle project property that
skips entirely the documentation tasks (javadoc, kdocs) as well as the
"distrbution" tasks managed in the framework-api module.
This allows developers to publish locally a SNAPSHOT of Spring Framework
without creating the entire documentation distribution. This is
particularly useful for local testing.
For example, `$ ./gradlew pTML -PskipDocs`.
Closes gh-31049
1 year ago
|
|
|
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")
|
|
|
|
testRuntimeOnly("org.apache.logging.log4j:log4j-jul")
|
|
|
|
testRuntimeOnly("org.apache.logging.log4j:log4j-slf4j2-impl")
|
|
|
|
// JSR-305 only used for non-required meta-annotations
|
|
|
|
compileOnly("com.google.code.findbugs:jsr305")
|
|
|
|
testCompileOnly("com.google.code.findbugs:jsr305")
|
|
|
|
}
|
Eliminate all Javadoc warnings
- Support external Javadoc links using Gradle's javadoc.options.links
- Fix all other Javadoc warnings, such as typos, references to
non-existent (or no longer existent) types and members, etc,
including changes related to the Quartz 2.0 upgrade (SPR-8275) and
adding the HTTP PATCH method (SPR-7985).
- Suppress all output for project-level `javadoc` tasks in order to
hide false-negative warnings about cross-module @see and @link
references (e.g. spring-core having a @see reference to spring-web).
Use the `--info` (-i) flag to gradle at any time to see project-level
javadoc warnings without running the entire `api` task. e.g.
`gradle :spring-core:javadoc -i`
- Favor root project level `api` task for detection of legitimate
Javadoc warnings. There are now zero Javadoc warnings across the
entirety of spring-framework. Goal: keep it that way.
- Remove all @link and @see references to types and members that exist
only in Servlet <= 2.5 and Hibernate <= 4.0, favoring 3.0+ and 4.0+
respectively. This is necessary because only one version of each of
these dependencies can be present on the global `api` javadoc task's
classpath. To that end, the `api` task classpath has now been
customized to ensure that the Servlet 3 API and Hibernate Core 4 jars
have precedence.
- SPR-8896 replaced our dependency on aspectjrt with a dependency on
aspectjweaver, which is fine from a POM point of view, but causes
a spurious warning to be emitted from the ant iajc task that it
"cannot find aspectjrt on the classpath" - even though aspectjweaver
is perfectly sufficient. In the name of keeping the console quiet, a
new `rt` configuration has been added, and aspectjrt added as a
dependency to it. In turn, configurations.rt.asPath is appended to
the iajc classpath during both compileJava and compileTestJava for
spring-aspects.
Issue: SPR-10078, SPR-8275, SPR-7985, SPR-8896
12 years ago
|
|
|
|
|
|
|
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 and weblogic.* packages
|
|
|
|
"https://www.ibm.com/docs/api/v1/content/SSEQTP_8.5.5/com.ibm.websphere.javadoc.doc/web/apidocs/", // com.ibm.*
|
|
|
|
"https://docs.jboss.org/jbossas/javadoc/4.0.5/connector/", // org.jboss.resource.*
|
|
|
|
"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.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 execute Gradle with Java 18+.
|
|
|
|
// See https://github.com/spring-projects/spring-framework/issues/27497
|
|
|
|
//
|
|
|
|
// "https://junit.org/junit5/docs/5.10.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/",
|
|
|
|
// 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/"
|
Eliminate all Javadoc warnings
- Support external Javadoc links using Gradle's javadoc.options.links
- Fix all other Javadoc warnings, such as typos, references to
non-existent (or no longer existent) types and members, etc,
including changes related to the Quartz 2.0 upgrade (SPR-8275) and
adding the HTTP PATCH method (SPR-7985).
- Suppress all output for project-level `javadoc` tasks in order to
hide false-negative warnings about cross-module @see and @link
references (e.g. spring-core having a @see reference to spring-web).
Use the `--info` (-i) flag to gradle at any time to see project-level
javadoc warnings without running the entire `api` task. e.g.
`gradle :spring-core:javadoc -i`
- Favor root project level `api` task for detection of legitimate
Javadoc warnings. There are now zero Javadoc warnings across the
entirety of spring-framework. Goal: keep it that way.
- Remove all @link and @see references to types and members that exist
only in Servlet <= 2.5 and Hibernate <= 4.0, favoring 3.0+ and 4.0+
respectively. This is necessary because only one version of each of
these dependencies can be present on the global `api` javadoc task's
classpath. To that end, the `api` task classpath has now been
customized to ensure that the Servlet 3 API and Hibernate Core 4 jars
have precedence.
- SPR-8896 replaced our dependency on aspectjrt with a dependency on
aspectjweaver, which is fine from a POM point of view, but causes
a spurious warning to be emitted from the ant iajc task that it
"cannot find aspectjrt on the classpath" - even though aspectjweaver
is perfectly sufficient. In the name of keeping the console quiet, a
new `rt` configuration has been added, and aspectjrt added as a
dependency to it. In turn, configurations.rt.asPath is appended to
the iajc classpath during both compileJava and compileTestJava for
spring-aspects.
Issue: SPR-10078, SPR-8275, SPR-7985, SPR-8896
12 years ago
|
|
|
] as String[]
|
Upgrade to JUnit 4.11 snapshot in support of JDK7
Class#getDeclaredMembers returns arbitrary results under JDK7. This
results in non-deterministic execution of JUnit test methods, often
revealing unintended dependencies between methods that rely on a
specific order to succeed.
JUnit 4.11 contains support for predictable test ordering [1], but at
the time of this commit, JUnit 4.11 has not yet been released.
Therefore we are testing against a snapshot version [2], which has been
uploaded to repo.springsource.org [3] for easy access. Note that this
artifact may be removed when JUnit 4.11 goes GA.
- Care has been taken to ensure that spring-test's compile-time
dependency on JUnit remains at 4.10. This means that the spring-test
pom.xml will continue to have an optional <dependency> on JUnit
4.10, instead of the 4.11 snapshot.
- For reasons not fully understood, the upgrade to the 4.11 snapshot
of junit-dep caused NoSuchMethodErrors around certain Hamcrest
types, particularly CoreMatchers and Matchers. import statements
have been updated accordingly throughout affected test cases.
- Runtime errors also occurred around uses of JUnit @Rule and
ExpectedException. These have been reverted to use simpler
mechanisms like @Test(expected) in the meantime.
- Some test methods with order-based dependencies on one another have
been renamed in order to fall in line with JUnit 4.11's new method
ordering (as opposed to actually fixing the inter-test
dependencies). In other areas, the fix was as simple as adding a
tearDown method and cleaning up state.
- For no apparent reason, the timeout in AspectJAutoProxyCreatorTests'
testAspectsAndAdvisorNotAppliedToPrototypeIsFastEnough method begins
to be exceeded. Prior to this commit the timeout value was 3000 ms;
on the CI server under Linux/JDK6 and JDK7, the test begins taking
anywhere from 3500-5500 ms with this commit. It is presumed that
this is an incidental artifact of the upgrade to JUnit 4.11. In any
case, there are no changes to src/main in this commit, so this
should not actually represent a performance risk for Spring
Framework users. The timeout has been increased to 6000 ms to
accommodate this situation.
[1]: https://github.com/KentBeck/junit/pull/293
[2]: https://github.com/downloads/KentBeck/junit/junit-dep-4.11-SNAPSHOT-20120805-1225.jar
[3]: https://repo.springsource.org/simple/ext-release-local/junit/junit-dep/4.11.20120805.1225
Issue: SPR-9783
12 years ago
|
|
|
}
|
|
|
|
|
|
|
|
configure(moduleProjects) { project ->
|
|
|
|
apply from: "${rootDir}/gradle/spring-module.gradle"
|
|
|
|
}
|
|
|
|
|
|
|
|
configure(rootProject) {
|
|
|
|
description = "Spring Framework"
|
|
|
|
apply plugin: 'org.springframework.build.api-diff'
|
|
|
|
}
|