Browse Source

Upgrade to Dokka 2.0.0

See https://kotlinlang.org/docs/dokka-migration.html

Closes gh-35211
pull/35212/head
Sébastien Deleuze 5 months ago
parent
commit
adc64d5cbc
  1. 2
      build.gradle
  2. 1
      buildSrc/build.gradle
  3. 44
      buildSrc/src/main/java/org/springframework/build/KotlinConventions.java
  4. 19
      framework-api/framework-api.gradle
  5. 3
      gradle.properties
  6. 32
      gradle/docs-dokka.gradle
  7. 5
      gradle/spring-module.gradle

2
build.gradle

@ -2,7 +2,7 @@ plugins {
id 'io.freefair.aspectj' version '8.13.1' apply false id 'io.freefair.aspectj' version '8.13.1' apply false
// kotlinVersion is managed in gradle.properties // kotlinVersion is managed in gradle.properties
id 'org.jetbrains.kotlin.plugin.serialization' version "${kotlinVersion}" apply false id 'org.jetbrains.kotlin.plugin.serialization' version "${kotlinVersion}" apply false
id 'org.jetbrains.dokka' version '1.9.20' id 'org.jetbrains.dokka'
id 'com.github.bjornvester.xjc' version '1.8.2' apply false id 'com.github.bjornvester.xjc' version '1.8.2' apply false
id 'io.github.goooler.shadow' version '8.1.8' apply false id 'io.github.goooler.shadow' version '8.1.8' apply false
id 'me.champeau.jmh' version '0.7.2' apply false id 'me.champeau.jmh' version '0.7.2' apply false

1
buildSrc/build.gradle

@ -20,6 +20,7 @@ ext {
dependencies { dependencies {
checkstyle "io.spring.javaformat:spring-javaformat-checkstyle:${javaFormatVersion}" checkstyle "io.spring.javaformat:spring-javaformat-checkstyle:${javaFormatVersion}"
implementation "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}" implementation "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}"
implementation "org.jetbrains.dokka:dokka-gradle-plugin:2.0.0"
implementation "com.tngtech.archunit:archunit:1.4.0" implementation "com.tngtech.archunit:archunit:1.4.0"
implementation "org.gradle:test-retry-gradle-plugin:1.6.2" implementation "org.gradle:test-retry-gradle-plugin:1.6.2"
implementation "io.spring.javaformat:spring-javaformat-gradle-plugin:${javaFormatVersion}" implementation "io.spring.javaformat:spring-javaformat-gradle-plugin:${javaFormatVersion}"

44
buildSrc/src/main/java/org/springframework/build/KotlinConventions.java

@ -17,6 +17,10 @@
package org.springframework.build; package org.springframework.build;
import org.gradle.api.Project; import org.gradle.api.Project;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.SourceSetContainer;
import org.jetbrains.dokka.gradle.DokkaExtension;
import org.jetbrains.dokka.gradle.DokkaPlugin;
import org.jetbrains.kotlin.gradle.dsl.JvmTarget; import org.jetbrains.kotlin.gradle.dsl.JvmTarget;
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion; import org.jetbrains.kotlin.gradle.dsl.KotlinVersion;
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile; import org.jetbrains.kotlin.gradle.tasks.KotlinCompile;
@ -28,8 +32,14 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile;
public class KotlinConventions { public class KotlinConventions {
void apply(Project project) { void apply(Project project) {
project.getPlugins().withId("org.jetbrains.kotlin.jvm", project.getPlugins().withId("org.jetbrains.kotlin.jvm", _ -> {
(plugin) -> project.getTasks().withType(KotlinCompile.class, this::configure)); project.getTasks().withType(KotlinCompile.class, this::configure);
if (project.getLayout().getProjectDirectory().dir("src/main/kotlin").getAsFile().exists()) {
project.getPlugins().apply(DokkaPlugin.class);
project.getExtensions().configure(DokkaExtension.class, dokka -> configure(project, dokka));
project.project(":framework-api").getDependencies().add("dokka", project);
}
});
} }
private void configure(KotlinCompile compile) { private void configure(KotlinCompile compile) {
@ -49,4 +59,34 @@ public class KotlinConventions {
}); });
} }
private void configure(Project project, DokkaExtension dokka) {
dokka.getDokkaSourceSets().forEach(sourceSet -> {
sourceSet.getSourceRoots().setFrom(project.file("src/main/kotlin"));
sourceSet.getClasspath()
.from(project.getExtensions()
.getByType(SourceSetContainer.class)
.getByName(SourceSet.MAIN_SOURCE_SET_NAME)
.getOutput());
var externalDocumentationLinks = sourceSet.getExternalDocumentationLinks();
externalDocumentationLinks.register("spring-framework", spec -> {
spec.url("https://docs.spring.io/spring-framework/docs/current/javadoc-api/");
spec.packageListUrl("https://docs.spring.io/spring-framework/docs/current/javadoc-api/element-list");
});
externalDocumentationLinks.register("reactor-core", spec ->
spec.url("https://projectreactor.io/docs/core/release/api/"));
externalDocumentationLinks.register("reactive-streams", spec ->
spec.url("https://www.reactive-streams.org/reactive-streams-1.0.3-javadoc/"));
externalDocumentationLinks.register("kotlinx-coroutines", spec ->
spec.url("https://kotlinlang.org/api/kotlinx.coroutines/"));
externalDocumentationLinks.register("hamcrest", spec ->
spec.url("https://javadoc.io/doc/org.hamcrest/hamcrest/2.1/"));
externalDocumentationLinks.register("jakarta-servlet", spec -> {
spec.url("https://javadoc.io/doc/jakarta.servlet/jakarta.servlet-api/latest/");
spec.packageListUrl("https://javadoc.io/doc/jakarta.servlet/jakarta.servlet-api/latest/element-list");
});
externalDocumentationLinks.register("rsocket-core", spec ->
spec.url("https://javadoc.io/static/io.rsocket/rsocket-core/1.1.1/"));
});
}
} }

19
framework-api/framework-api.gradle

@ -1,6 +1,7 @@
plugins { plugins {
id 'java-platform' id 'java-platform'
id 'io.freefair.aggregate-javadoc' version '8.13.1' id 'io.freefair.aggregate-javadoc' version '8.13.1'
id 'org.jetbrains.dokka'
} }
description = "Spring Framework API Docs" description = "Spring Framework API Docs"
@ -54,23 +55,19 @@ javadoc {
} }
} }
/** dokka {
* Produce KDoc for all Spring Framework modules in "build/docs/kdoc" moduleName = "spring-framework"
*/ dokkaPublications.html {
rootProject.tasks.dokkaHtmlMultiModule.configure { outputDirectory = project.java.docsDir.dir("kdoc-api")
dependsOn { includes.from("$rootProject.rootDir/framework-docs/src/docs/api/dokka-overview.md")
tasks.named("javadoc")
} }
moduleName.set("spring-framework")
outputDirectory.set(project.java.docsDir.dir("kdoc-api").get().asFile)
includes.from("$rootProject.rootDir/framework-docs/src/docs/api/dokka-overview.md")
} }
/** /**
* Zip all Java docs (javadoc & kdoc) into a single archive * Zip all Java docs (javadoc & kdoc) into a single archive
*/ */
tasks.register('docsZip', Zip) { tasks.register('docsZip', Zip) {
dependsOn = ['javadoc', rootProject.tasks.dokkaHtmlMultiModule] dependsOn = ['javadoc', 'dokkaGenerate']
group = "distribution" group = "distribution"
description = "Builds -${archiveClassifier} archive containing api and reference " + description = "Builds -${archiveClassifier} archive containing api and reference " +
"for deployment at https://docs.spring.io/spring-framework/docs/." "for deployment at https://docs.spring.io/spring-framework/docs/."
@ -83,7 +80,7 @@ tasks.register('docsZip', Zip) {
from(javadoc) { from(javadoc) {
into "javadoc-api" into "javadoc-api"
} }
from(rootProject.tasks.dokkaHtmlMultiModule.outputDirectory) { from(project.java.docsDir.dir("kdoc-api")) {
into "kdoc-api" into "kdoc-api"
} }
} }

3
gradle.properties

@ -9,3 +9,6 @@ byteBuddyVersion=1.17.6
kotlin.jvm.target.validation.mode=ignore kotlin.jvm.target.validation.mode=ignore
kotlin.stdlib.default.dependency=false kotlin.stdlib.default.dependency=false
org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true
org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled

32
gradle/docs-dokka.gradle

@ -1,32 +0,0 @@
tasks.findByName("dokkaHtmlPartial")?.configure {
outputDirectory.set(new File(buildDir, "docs/kdoc"))
dokkaSourceSets {
configureEach {
sourceRoots.setFrom(file("src/main/kotlin"))
classpath.from(sourceSets["main"].runtimeClasspath)
externalDocumentationLink {
url.set(new URL("https://docs.spring.io/spring-framework/docs/current/javadoc-api/"))
packageListUrl.set(new URL("https://docs.spring.io/spring-framework/docs/current/javadoc-api/element-list"))
}
externalDocumentationLink {
url.set(new URL("https://projectreactor.io/docs/core/release/api/"))
}
externalDocumentationLink {
url.set(new URL("https://www.reactive-streams.org/reactive-streams-1.0.3-javadoc/"))
}
externalDocumentationLink {
url.set(new URL("https://kotlin.github.io/kotlinx.coroutines/"))
}
externalDocumentationLink {
url.set(new URL("https://javadoc.io/doc/org.hamcrest/hamcrest/2.1/"))
}
externalDocumentationLink {
url.set(new URL("https://javadoc.io/doc/jakarta.servlet/jakarta.servlet-api/latest/"))
packageListUrl.set(new URL("https://javadoc.io/doc/jakarta.servlet/jakarta.servlet-api/latest/element-list"))
}
externalDocumentationLink {
url.set(new URL("https://javadoc.io/static/io.rsocket/rsocket-core/1.1.1/"))
}
}
}
}

5
gradle/spring-module.gradle

@ -15,11 +15,6 @@ dependencies {
jmh 'net.sf.jopt-simple:jopt-simple' jmh 'net.sf.jopt-simple:jopt-simple'
} }
pluginManager.withPlugin("kotlin") {
apply plugin: "org.jetbrains.dokka"
apply from: "${rootDir}/gradle/docs-dokka.gradle"
}
jmh { jmh {
duplicateClassesStrategy = DuplicatesStrategy.EXCLUDE duplicateClassesStrategy = DuplicatesStrategy.EXCLUDE
} }

Loading…
Cancel
Save