diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index c2d323e47bb..2f3fbb4c571 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -41,6 +41,7 @@ dependencies { implementation(platform("org.springframework:spring-framework-bom:${versions.springFramework}")) implementation("com.diffplug.gradle:goomph:3.37.2") + implementation("dev.adamko.dokkatoo:dokkatoo-plugin:2.3.1") implementation("com.fasterxml.jackson.core:jackson-databind:${versions.jackson}") implementation("com.github.node-gradle:gradle-node-plugin:3.5.1") implementation("com.gradle:develocity-gradle-plugin:3.17.2") diff --git a/buildSrc/src/main/java/org/springframework/boot/build/JavaConventions.java b/buildSrc/src/main/java/org/springframework/boot/build/JavaConventions.java index 31294ecc619..e3c64a67160 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/JavaConventions.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/JavaConventions.java @@ -261,8 +261,9 @@ class JavaConventions { configuration.setCanBeResolved(false); }); configurations - .matching((configuration) -> configuration.getName().endsWith("Classpath") + .matching((configuration) -> (configuration.getName().endsWith("Classpath") || JavaPlugin.ANNOTATION_PROCESSOR_CONFIGURATION_NAME.equals(configuration.getName())) + && (!configuration.getName().contains("dokkatoo"))) .all((configuration) -> configuration.extendsFrom(dependencyManagement)); Dependency springBootParent = project.getDependencies() .enforcedPlatform(project.getDependencies() diff --git a/buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java b/buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java index c5e896160b4..2b3a9c48cdd 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/KotlinConventions.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,10 @@ package org.springframework.boot.build; import java.util.ArrayList; import java.util.List; +import dev.adamko.dokkatoo.DokkatooExtension; +import dev.adamko.dokkatoo.formats.DokkatooHtmlPlugin; import org.gradle.api.Project; +import org.gradle.api.tasks.SourceSet; import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions; import org.jetbrains.kotlin.gradle.tasks.KotlinCompile; @@ -44,9 +47,10 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile; class KotlinConventions { void apply(Project project) { - project.getPlugins() - .withId("org.jetbrains.kotlin.jvm", - (plugin) -> project.getTasks().withType(KotlinCompile.class, this::configure)); + project.getPlugins().withId("org.jetbrains.kotlin.jvm", (plugin) -> { + project.getTasks().withType(KotlinCompile.class, this::configure); + configureDokkatoo(project); + }); } private void configure(KotlinCompile compile) { @@ -60,4 +64,12 @@ class KotlinConventions { compile.getKotlinOptions().setFreeCompilerArgs(freeCompilerArgs); } + private void configureDokkatoo(Project project) { + project.getPlugins().apply(DokkatooHtmlPlugin.class); + DokkatooExtension dokkatoo = project.getExtensions().getByType(DokkatooExtension.class); + dokkatoo.getDokkatooSourceSets() + .named(SourceSet.MAIN_SOURCE_SET_NAME) + .configure((spec) -> spec.getSourceRoots().setFrom(project.file("src/main/kotlin"))); + } + } diff --git a/spring-boot-project/spring-boot-autoconfigure/build.gradle b/spring-boot-project/spring-boot-autoconfigure/build.gradle index da1c1375368..e53add9058f 100644 --- a/spring-boot-project/spring-boot-autoconfigure/build.gradle +++ b/spring-boot-project/spring-boot-autoconfigure/build.gradle @@ -1,6 +1,5 @@ plugins { id "java-library" - id "org.jetbrains.kotlin.jvm" id "org.springframework.boot.auto-configuration" id "org.springframework.boot.configuration-properties" id "org.springframework.boot.conventions" diff --git a/spring-boot-project/spring-boot-docs/build.gradle b/spring-boot-project/spring-boot-docs/build.gradle index 2bfa1a64100..ade35c5c56d 100644 --- a/spring-boot-project/spring-boot-docs/build.gradle +++ b/spring-boot-project/spring-boot-docs/build.gradle @@ -54,6 +54,9 @@ dependencies { configurationProperties(project(path: ":spring-boot-project:spring-boot-test-autoconfigure", configuration: "configurationPropertiesMetadata")) configurationProperties(project(path: ":spring-boot-project:spring-boot-testcontainers", configuration: "configurationPropertiesMetadata")) + dokkatoo(project(path: ":spring-boot-project:spring-boot")) + dokkatoo(project(path: ":spring-boot-project:spring-boot-test")) + implementation(project(path: ":spring-boot-project:spring-boot-actuator")) implementation(project(path: ":spring-boot-project:spring-boot-actuator-autoconfigure")) implementation(project(path: ":spring-boot-project:spring-boot-autoconfigure")) @@ -183,6 +186,10 @@ dependencies { testSlices(project(path: ":spring-boot-project:spring-boot-test-autoconfigure", configuration: "testSliceMetadata")) } +dokkatoo { + moduleName.set("Spring Boot Kotlin API") +} + task aggregatedJavadoc(type: Javadoc) { dependsOn dependencyVersions project.rootProject.gradle.projectsEvaluated { @@ -344,6 +351,9 @@ def antoraApiCatalogContent = tasks.register("antoraApiCatalogContent", Zip) { from(aggregatedJavadoc) { into "java" } + from(tasks.named("dokkatooGeneratePublicationHtml")) { + into "kotlin" + } } def copyAntoraContentDependencies = tasks.register("copyAntoraContentDependencies", Copy) { @@ -366,6 +376,12 @@ gradle.projectsEvaluated { } } +dokkatoo { + dokkatooPublications.configureEach { + includes.from("src/docs/dokkatoo/dokka-overview.md") + } +} + publishing { publications { getByName("maven") { diff --git a/spring-boot-project/spring-boot-docs/src/docs/antora/antora.yml b/spring-boot-project/spring-boot-docs/src/docs/antora/antora.yml index b75641b647f..0b9312fb983 100644 --- a/spring-boot-project/spring-boot-docs/src/docs/antora/antora.yml +++ b/spring-boot-project/spring-boot-docs/src/docs/antora/antora.yml @@ -28,3 +28,5 @@ ext: attributes: { external: true} - path: [ "Java APIs", "Gradle Plugin" ] attributes: { external: true } + - path: [ "Kotlin APIs", "Spring Boot" ] + attributes: { external: true } diff --git a/spring-boot-project/spring-boot-docs/src/docs/antora/modules/api/partials/nav-kotlin-api.adoc b/spring-boot-project/spring-boot-docs/src/docs/antora/modules/api/partials/nav-kotlin-api.adoc new file mode 100644 index 00000000000..ccc8b74522b --- /dev/null +++ b/spring-boot-project/spring-boot-docs/src/docs/antora/modules/api/partials/nav-kotlin-api.adoc @@ -0,0 +1,2 @@ +* Kotlin APIs +** xref:api:kotlin/index.html[Spring Boot] diff --git a/spring-boot-project/spring-boot-docs/src/docs/antora/nav.adoc b/spring-boot-project/spring-boot-docs/src/docs/antora/nav.adoc index c7a6113d18c..5cbf2e5e4ba 100644 --- a/spring-boot-project/spring-boot-docs/src/docs/antora/nav.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/antora/nav.adoc @@ -6,5 +6,6 @@ include::build-tool-plugin:partial$nav-build-tool-plugin.adoc[] include::cli:partial$nav-cli.adoc[] include::api:partial$nav-rest-api.adoc[] include::api:partial$nav-java-api.adoc[] +include::api:partial$nav-kotlin-api.adoc[] include::specification:partial$nav-specification.adoc[] include::appendix:partial$nav-appendix.adoc[] diff --git a/spring-boot-project/spring-boot-docs/src/docs/dokkatoo/dokka-overview.md b/spring-boot-project/spring-boot-docs/src/docs/dokkatoo/dokka-overview.md new file mode 100644 index 00000000000..9b2f14d814e --- /dev/null +++ b/spring-boot-project/spring-boot-docs/src/docs/dokkatoo/dokka-overview.md @@ -0,0 +1,2 @@ +# All Modules +_See also the Java API documentation (Javadoc)._