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 autoConfiguration configurationProperties gradlePluginDocumentation mavenPluginDocumentation testSlices } dependencies { testSlices project(path: ':spring-boot-project:spring-boot-test-autoconfigure', configuration: 'testSliceMetadata') 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') actuatorApiDocumentation project(path: ':spring-boot-project:spring-boot-actuator-autoconfigure', configuration: 'documentation') mavenPluginDocumentation project(path: ':spring-boot-project:spring-boot-tools:spring-boot-maven-plugin', configuration: 'documentation') } 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 publishedProjects = rootProject.subprojects.findAll { it != project} .findAll { it.plugins.hasPlugin(JavaPlugin) && it.plugins.hasPlugin(MavenPublishPlugin) } .findAll { it.name != 'spring-boot-maven-plugin' && it.name != 'spring-boot-gradle-plugin' } 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 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-9.0-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 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 baseDirFollowsSourceDir() 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-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 '*.htmlsingleadoc' } } asciidoctorPdf { sources { include '*.pdfadoc' } } task asciidoctorMultipage(type: org.asciidoctor.gradle.jvm.AsciidoctorTask) { sources { include '*.htmladoc' include '*.adoc' } } syncDocumentationSourceForAsciidoctor { dependsOn documentTestSlices dependsOn documentStarters dependsOn documentAutoConfigurationClasses dependsOn documentDependencyVersions 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 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 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' } 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 } } }