plugins { id "java-base" id "org.asciidoctor.jvm.convert" id "org.asciidoctor.jvm.pdf" id "org.springframework.boot.conventions" id "org.springframework.boot.deployed" } configurations { actuatorApiDocumentation asciidoctorExtensions autoConfiguration configurationProperties gradlePluginDocumentation mavenPluginDocumentation testSlices } repositories { maven { url "https://repo.spring.io/release" mavenContent { includeGroup "io.spring.asciidoctor" } } } dependencies { actuatorApiDocumentation(project(path: ":spring-boot-project:spring-boot-actuator-autoconfigure", configuration: "documentation")) asciidoctorExtensions(platform(project(":spring-boot-project:spring-boot-parent"))) asciidoctorExtensions("io.spring.asciidoctor:spring-asciidoctor-extensions-spring-boot") asciidoctorExtensions(project(path: ":spring-boot-project:spring-boot-actuator-autoconfigure")) asciidoctorExtensions(project(path: ":spring-boot-project:spring-boot-autoconfigure")) asciidoctorExtensions(project(path: ":spring-boot-project:spring-boot-devtools")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-autoconfigure", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-actuator-autoconfigure", configuration: "autoConfigurationMetadata")) autoConfiguration(project(path: ":spring-boot-project:spring-boot-devtools", configuration: "autoConfigurationMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-actuator", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-actuator-autoconfigure", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-autoconfigure", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-devtools", configuration: "configurationPropertiesMetadata")) gradlePluginDocumentation(project(path: ":spring-boot-project:spring-boot-tools:spring-boot-gradle-plugin", configuration: "documentation")) mavenPluginDocumentation(project(path: ":spring-boot-project:spring-boot-tools:spring-boot-maven-plugin", configuration: "documentation")) testSlices(project(path: ":spring-boot-project:spring-boot-test-autoconfigure", configuration: "testSliceMetadata")) } task dependencyVersions(type: org.springframework.boot.build.constraints.ExtractVersionConstraints) { enforcedPlatform(":spring-boot-project:spring-boot-dependencies") } task javadoc(type: Javadoc) { dependsOn dependencyVersions project.rootProject.gradle.projectsEvaluated { Set excludedProjects = ['spring-boot-antlib', 'spring-boot-configuration-metadata', 'spring-boot-configuration-processor', 'spring-boot-gradle-plugin', 'spring-boot-jarmode-layertools', 'spring-boot-maven-plugin'] Set publishedProjects = rootProject.subprojects.findAll { it != project} .findAll { it.plugins.hasPlugin(JavaPlugin) && it.plugins.hasPlugin(MavenPublishPlugin) } .findAll { !excludedProjects.contains(it.name) } dependsOn publishedProjects.javadoc source publishedProjects.javadoc.source classpath = project.files(publishedProjects.javadoc.classpath) destinationDir = project.file "${buildDir}/docs/javadoc" options { author = true docTitle = "Spring Boot ${project.version} API" encoding = "UTF-8" memberLevel = "protected" outputLevel = "quiet" source = "1.8" splitIndex = true stylesheetFile = file("src/main/javadoc/spring-javadoc.css") use = true windowTitle = "Spring Boot ${project.version} API" } doFirst { def versionConstraints = dependencyVersions.versionConstraints def tomcatVersion = "${versionConstraints["org.apache.tomcat:tomcat-annotations-api"]}" def tomcatDocsVersion = tomcatVersion.substring(0, tomcatVersion.lastIndexOf(".")); options.links = [ "https://docs.oracle.com/javase/8/docs/api/", "https://docs.oracle.com/javaee/7/api/", "https://docs.spring.io/spring-framework/docs/${versionConstraints["org.springframework:spring-core"]}/javadoc-api/", "https://docs.spring.io/spring-security/site/docs/${versionConstraints["org.springframework.security:spring-security-core"]}/api/", "https://tomcat.apache.org/tomcat-${tomcatDocsVersion}-doc/api/", "https://www.eclipse.org/jetty/javadoc/${versionConstraints["org.eclipse.jetty:jetty-server"]}/", "https://www.thymeleaf.org/apidocs/thymeleaf/${versionConstraints["org.thymeleaf:thymeleaf"]}/" ] as String[] } } } task documentTestSlices(type: org.springframework.boot.build.test.autoconfigure.DocumentTestSlices) { testSlices = configurations.testSlices outputFile = file("${buildDir}/docs/generated/test-slice-auto-configuration.adoc") } task documentStarters(type: org.springframework.boot.build.starters.DocumentStarters) { outputDir = file("${buildDir}/docs/generated/starters/") } task documentAutoConfigurationClasses(type: org.springframework.boot.build.autoconfigure.DocumentAutoConfigurationClasses) { autoConfiguration = configurations.autoConfiguration outputDir = file("${buildDir}/docs/generated/auto-configuration-classes/") } task documentDependencyVersions(type: org.springframework.boot.build.constraints.DocumentConstrainedVersions) { dependsOn dependencyVersions constrainedVersions.set(providers.provider { dependencyVersions.constrainedVersions }) outputFile = file("${buildDir}/docs/generated/dependency-versions.adoc") } task documentVersionProperties(type: org.springframework.boot.build.constraints.DocumentVersionProperties) { dependsOn dependencyVersions versionProperties.set(providers.provider { dependencyVersions.versionProperties}) outputFile = file("${buildDir}/docs/generated/version-properties.adoc") } task documentConfigurationProperties(type: org.springframework.boot.build.context.properties.DocumentConfigurationProperties) { configurationPropertyMetadata = configurations.configurationProperties outputDir = file("${buildDir}/docs/generated/config-docs/") } tasks.withType(org.asciidoctor.gradle.jvm.AbstractAsciidoctorTask) { dependsOn dependencyVersions configurations "asciidoctorExtensions" baseDirFollowsSourceDir() asciidoctorj { fatalWarnings = ['^((?!successfully validated).)*$'] } doFirst { def versionConstraints = dependencyVersions.versionConstraints attributes "jetty-version": versionConstraints["org.eclipse.jetty:jetty-server"], "jooq-version": versionConstraints["org.jooq:jooq"], "spring-amqp-version": versionConstraints["org.springframework.amqp:spring-amqp"], "spring-batch-version": versionConstraints["org.springframework.batch:spring-batch-core"], "spring-boot-version": project.version, "spring-data-commons-version": versionConstraints["org.springframework.data:spring-data-commons"], "spring-data-couchbase-version": versionConstraints["org.springframework.data:spring-data-couchbase"], "spring-data-jdbc-version": versionConstraints["org.springframework.data:spring-data-jdbc"], "spring-data-jpa-version": versionConstraints["org.springframework.data:spring-data-jpa"], "spring-data-mongodb-version": versionConstraints["org.springframework.data:spring-data-mongodb"], "spring-data-neo4j-version": versionConstraints["org.springframework.data:spring-data-neo4j"], "spring-data-r2dbc-version": versionConstraints["org.springframework.data:spring-data-r2dbc"], "spring-data-rest-version": versionConstraints["org.springframework.data:spring-data-rest-core"], "spring-data-solr-version": versionConstraints["org.springframework.data:spring-data-solr"], "spring-framework-version": versionConstraints["org.springframework:spring-core"], "spring-integration-version": versionConstraints["org.springframework.integration:spring-integration-core"], "spring-security-version": versionConstraints["org.springframework.security:spring-security-core"], "spring-webservices-version": versionConstraints["org.springframework.ws:spring-ws-core"] } } asciidoctor { sources { include "*.singleadoc" } } asciidoctorPdf { sources { include "*.singleadoc" } } task asciidoctorMultipage(type: org.asciidoctor.gradle.jvm.AsciidoctorTask) { sources { include "*.adoc" } } syncDocumentationSourceForAsciidoctor { dependsOn documentTestSlices dependsOn documentStarters dependsOn documentAutoConfigurationClasses dependsOn documentDependencyVersions dependsOn documentVersionProperties dependsOn documentConfigurationProperties from("${buildDir}/docs/generated") { into "asciidoc" } from("src/main/java") { into "main/java" } from("src/test/java") { into "test/java" } } syncDocumentationSourceForAsciidoctorMultipage { dependsOn documentTestSlices dependsOn documentStarters dependsOn documentAutoConfigurationClasses dependsOn documentDependencyVersions dependsOn documentVersionProperties dependsOn documentConfigurationProperties from("${buildDir}/docs/generated") { into "asciidoc" } from("src/main/java") { into "main/java" } from("src/test/java") { into "test/java" } } syncDocumentationSourceForAsciidoctorPdf { dependsOn documentTestSlices dependsOn documentStarters dependsOn documentAutoConfigurationClasses dependsOn documentDependencyVersions dependsOn documentVersionProperties dependsOn documentConfigurationProperties from("${buildDir}/docs/generated") { into "asciidoc" } from("src/main/java") { into "main/java" } from("src/test/java") { into "test/java" } } task zip(type: Zip) { dependsOn asciidoctor, asciidoctorMultipage, asciidoctorPdf, configurations.gradlePluginDocumentation, configurations.actuatorApiDocumentation, configurations.mavenPluginDocumentation duplicatesStrategy "fail" from(asciidoctor.outputDir) { into "reference/htmlsingle" } from(asciidoctorPdf.outputDir) { into "reference/pdf" include "index.pdf" rename { "spring-boot-reference.pdf" } } from(asciidoctorMultipage.outputDir) { into "reference/html" } from(javadoc) { into "api" } into("gradle-plugin") { from { zipTree(configurations.gradlePluginDocumentation.singleFile) } } into("actuator-api") { from { zipTree(configurations.actuatorApiDocumentation.singleFile) } } into("maven-plugin") { from { zipTree(configurations.mavenPluginDocumentation.singleFile) } } } artifacts { archives zip } publishing { publications { deployment(MavenPublication) { artifact zip } } }