A side effect of 71995a9087 caused the
dynamic table of contents in the left-hand side navigation to no longer
be displayed, likely due to the missing "details" DIV.
This commit addresses this issue by applying the custom header only to
index.adoc.
Consequently, the TOC is now displayed again on all pages except the
index page, but the customized header is no longer applied to those
pages.
We may revisit this issue if we decide that we want the custom header
on all pages (and not just the index page).
Closes gh-27177
294 lines
7.6 KiB
Groovy
294 lines
7.6 KiB
Groovy
configurations {
|
|
asciidoctorExt
|
|
}
|
|
|
|
dependencies {
|
|
asciidoctorExt("io.spring.asciidoctor:spring-asciidoctor-extensions-block-switch:0.5.0")
|
|
}
|
|
|
|
repositories {
|
|
maven {
|
|
url "https://repo.spring.io/release"
|
|
mavenContent {
|
|
includeGroup "io.spring.asciidoctor"
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Produce Javadoc for all Spring Framework modules in "build/docs/javadoc"
|
|
*/
|
|
task api(type: Javadoc) {
|
|
group = "Documentation"
|
|
description = "Generates aggregated Javadoc API documentation."
|
|
title = "${rootProject.description} ${version} API"
|
|
|
|
dependsOn {
|
|
moduleProjects.collect {
|
|
it.tasks.getByName("jar")
|
|
}
|
|
}
|
|
doFirst {
|
|
classpath = files(
|
|
// ensure the javadoc process can resolve types compiled from .aj sources
|
|
project(":spring-aspects").sourceSets.main.output
|
|
)
|
|
classpath += files(moduleProjects.collect { it.sourceSets.main.compileClasspath })
|
|
}
|
|
|
|
options {
|
|
encoding = "UTF-8"
|
|
memberLevel = JavadocMemberLevel.PROTECTED
|
|
author = true
|
|
header = rootProject.description
|
|
use = true
|
|
overview = "src/docs/api/overview.html"
|
|
stylesheetFile = file("src/docs/api/stylesheet.css")
|
|
splitIndex = true
|
|
links(project.ext.javadocLinks)
|
|
addStringOption('Xdoclint:none', '-quiet')
|
|
if(JavaVersion.current().isJava9Compatible()) {
|
|
addBooleanOption('html5', true)
|
|
}
|
|
}
|
|
source moduleProjects.collect { project ->
|
|
project.sourceSets.main.allJava
|
|
}
|
|
maxMemory = "1024m"
|
|
destinationDir = file("$buildDir/docs/javadoc")
|
|
}
|
|
|
|
/**
|
|
* Produce KDoc for all Spring Framework modules in "build/docs/kdoc"
|
|
*/
|
|
dokka {
|
|
dependsOn {
|
|
tasks.getByName("api")
|
|
}
|
|
|
|
doFirst {
|
|
configuration {
|
|
classpath = moduleProjects.collect { project -> project.jar.outputs.files.getFiles() }.flatten()
|
|
classpath += files(moduleProjects.collect { it.sourceSets.main.compileClasspath })
|
|
|
|
moduleProjects.findAll {
|
|
it.pluginManager.hasPlugin("kotlin")
|
|
}.each { project ->
|
|
def kotlinDirs = project.sourceSets.main.kotlin.srcDirs.collect()
|
|
kotlinDirs -= project.sourceSets.main.java.srcDirs
|
|
kotlinDirs.each { dir ->
|
|
if (dir.exists()) {
|
|
sourceRoot {
|
|
path = dir.path
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
outputFormat = "html"
|
|
outputDirectory = "$buildDir/docs/kdoc"
|
|
|
|
configuration {
|
|
moduleName = "spring-framework"
|
|
|
|
externalDocumentationLink {
|
|
url = new URL("https://docs.spring.io/spring-framework/docs/$version/javadoc-api/")
|
|
packageListUrl = new File(buildDir, "docs/javadoc/package-list").toURI().toURL()
|
|
}
|
|
externalDocumentationLink {
|
|
url = new URL("https://projectreactor.io/docs/core/release/api/")
|
|
}
|
|
externalDocumentationLink {
|
|
url = new URL("https://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/")
|
|
}
|
|
/*
|
|
This link causes errors, removing to fix the build.
|
|
externalDocumentationLink {
|
|
url = new URL("https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/")
|
|
}
|
|
*/
|
|
externalDocumentationLink {
|
|
url = new URL("https://r2dbc.io/spec/0.8.3.RELEASE/api/")
|
|
}
|
|
}
|
|
}
|
|
|
|
task downloadResources(type: Download) {
|
|
def version = "0.2.5"
|
|
src "https://repo.spring.io/release/io/spring/docresources/" +
|
|
"spring-doc-resources/$version/spring-doc-resources-${version}.zip"
|
|
dest project.file("$buildDir/docs/spring-doc-resources.zip")
|
|
onlyIfModified true
|
|
useETag "all"
|
|
}
|
|
|
|
task extractDocResources(type: Copy, dependsOn: downloadResources) {
|
|
from project.zipTree(downloadResources.dest);
|
|
into "$buildDir/docs/spring-docs-resources/"
|
|
}
|
|
|
|
asciidoctorj {
|
|
def docRoot = 'https://docs.spring.io'
|
|
def docsSpringFramework = "${docRoot}/spring-framework/docs/${project.version}"
|
|
version = '2.4.1'
|
|
fatalWarnings ".*"
|
|
options doctype: 'book', eruby: 'erubis'
|
|
attributes([
|
|
icons: 'font',
|
|
idprefix: '',
|
|
idseparator: '-',
|
|
docinfo: 'shared,private-header', // https://docs.asciidoctor.org/asciidoctor/latest/docinfo/
|
|
revnumber: project.version,
|
|
sectanchors: '',
|
|
sectnums: '',
|
|
'source-highlighter': 'highlight.js',
|
|
highlightjsdir: 'js/highlight',
|
|
'highlightjs-theme': 'googlecode',
|
|
stylesdir: 'css/',
|
|
stylesheet: 'stylesheet.css',
|
|
'spring-version': project.version,
|
|
'spring-framework-main-code': 'https://github.com/spring-projects/spring-framework/tree/main',
|
|
'doc-root': docRoot,
|
|
'docs-spring-framework': docsSpringFramework,
|
|
'api-spring-framework': "${docsSpringFramework}/javadoc-api/org/springframework"
|
|
])
|
|
}
|
|
|
|
/**
|
|
* Generate the Spring Framework Reference documentation from "src/docs/asciidoc"
|
|
* in "build/docs/ref-docs/html5".
|
|
*/
|
|
asciidoctor {
|
|
baseDirFollowsSourceDir()
|
|
configurations 'asciidoctorExt'
|
|
sources {
|
|
include '*.adoc'
|
|
}
|
|
outputDir "$buildDir/docs/ref-docs/html5"
|
|
logDocuments = true
|
|
resources {
|
|
from(sourceDir) {
|
|
include 'images/*.png', 'css/**', 'js/**'
|
|
}
|
|
from extractDocResources
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Generate the Spring Framework Reference documentation from "src/docs/asciidoc"
|
|
* in "build/docs/ref-docs/pdf".
|
|
*/
|
|
asciidoctorPdf {
|
|
baseDirFollowsSourceDir()
|
|
configurations 'asciidoctorExt'
|
|
sources {
|
|
include '*.adoc'
|
|
}
|
|
outputDir "$buildDir/docs/ref-docs/pdf"
|
|
logDocuments = true
|
|
}
|
|
|
|
/**
|
|
* Zip all docs (API and reference) into a single archive
|
|
*/
|
|
task docsZip(type: Zip, dependsOn: ['api', 'asciidoctor', 'asciidoctorPdf', 'dokka']) {
|
|
group = "Distribution"
|
|
description = "Builds -${archiveClassifier} archive containing api and reference " +
|
|
"for deployment at https://docs.spring.io/spring-framework/docs."
|
|
|
|
archiveBaseName.set("spring-framework")
|
|
archiveClassifier.set("docs")
|
|
from("src/dist") {
|
|
include "changelog.txt"
|
|
}
|
|
from (api) {
|
|
into "javadoc-api"
|
|
}
|
|
from ("$asciidoctor.outputDir") {
|
|
into "reference/html"
|
|
}
|
|
from ("$asciidoctorPdf.outputDir") {
|
|
into "reference/pdf"
|
|
}
|
|
from (dokka) {
|
|
into "kdoc-api"
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Zip all Spring Framework schemas into a single archive
|
|
*/
|
|
task schemaZip(type: Zip) {
|
|
group = "Distribution"
|
|
archiveBaseName.set("spring-framework")
|
|
archiveClassifier.set("schema")
|
|
description = "Builds -${archiveClassifier} archive containing all " +
|
|
"XSDs for deployment at https://springframework.org/schema."
|
|
duplicatesStrategy DuplicatesStrategy.EXCLUDE
|
|
moduleProjects.each { module ->
|
|
def Properties schemas = new Properties();
|
|
|
|
module.sourceSets.main.resources.find {
|
|
(it.path.endsWith("META-INF/spring.schemas") || it.path.endsWith("META-INF\\spring.schemas"))
|
|
}?.withInputStream { schemas.load(it) }
|
|
|
|
for (def key : schemas.keySet()) {
|
|
def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1')
|
|
assert shortName != key
|
|
File xsdFile = module.sourceSets.main.resources.find {
|
|
(it.path.endsWith(schemas.get(key)) || it.path.endsWith(schemas.get(key).replaceAll('\\/','\\\\')))
|
|
}
|
|
assert xsdFile != null
|
|
into (shortName) {
|
|
from xsdFile.path
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create a distribution zip with everything:
|
|
* docs, schemas, jars, source jars, javadoc jars
|
|
*/
|
|
task distZip(type: Zip, dependsOn: [docsZip, schemaZip]) {
|
|
group = "Distribution"
|
|
archiveBaseName.set("spring-framework")
|
|
archiveClassifier.set("dist")
|
|
description = "Builds -${archiveClassifier} archive, containing all jars and docs, " +
|
|
"suitable for community download page."
|
|
|
|
ext.baseDir = "spring-framework-${project.version}";
|
|
|
|
from("src/docs/dist") {
|
|
include "readme.txt"
|
|
include "license.txt"
|
|
include "notice.txt"
|
|
into "${baseDir}"
|
|
expand(copyright: new Date().format("yyyy"), version: project.version)
|
|
}
|
|
|
|
from(zipTree(docsZip.archivePath)) {
|
|
into "${baseDir}/docs"
|
|
}
|
|
|
|
from(zipTree(schemaZip.archivePath)) {
|
|
into "${baseDir}/schema"
|
|
}
|
|
|
|
moduleProjects.each { module ->
|
|
into ("${baseDir}/libs") {
|
|
from module.jar
|
|
if (module.tasks.findByPath("sourcesJar")) {
|
|
from module.sourcesJar
|
|
}
|
|
if (module.tasks.findByPath("javadocJar")) {
|
|
from module.javadocJar
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
distZip.mustRunAfter moduleProjects.check
|