Spec-Zone.ru › Kotlin 2

Переход на плагин Dokka Gradle v2

Эта страница актуальна, только если вы используете DGPv1 и хотите перейти на DGPv2. Начиная с Dokka 2.1.0, DGP v2 включен по умолчанию. Если вы используете Dokka 2.1.0 или более позднюю версию, эту страницу можно пропустить и сразу перейти к документации Dokka Gradle.

Плагин Dokka Gradle (DGP) — это инструмент для создания полной документации API проектов Kotlin, собираемых с помощью Gradle.

DGP обрабатывает комментарии KDoc в Kotlin и комментарии Javadoc в Java, извлекая из них информацию и создавая структурированную документацию в формате HTML или Javadoc.

Режим Dokka Gradle plugin v2 включен по умолчанию и соответствует рекомендациям Gradle:

  • Использует типы Gradle, что повышает производительность.

  • Использует понятную конфигурацию DSL верхнего уровня вместо низкоуровневой настройки на основе задач, что упрощает скрипты сборки и делает их более читаемыми.

  • Использует более декларативный подход к агрегации документации, упрощая управление документацией в проектах с несколькими модулями.

  • Использует типобезопасную конфигурацию плагина, повышая надежность и удобство сопровождения скриптов сборки.

  • Полностью поддерживает кэш конфигурации и кэш сборки Gradle, что повышает производительность и упрощает работу со сборками.

В этом руководстве приведены дополнительные сведения об изменениях и переходе с режимов DGP v1 на v2.

Перед началом работы

Перед началом миграции выполните следующие действия.

Проверьте поддерживаемые версии

Убедитесь, что ваш проект соответствует минимальным требованиям к версиям:

Инструмент

Версия

Gradle

7.6 или выше

Плагин Android Gradle

7.0 или выше

Плагин Kotlin Gradle

1.9 или выше

Включите DGP v2

Обновите версию Dokka до 2.2.0 в блоке plugins {} файла build.gradle.kts вашего проекта:

plugins {
    kotlin("jvm") version "2.1.10"
    id("org.jetbrains.dokka") version "2.2.0"
}

Кроме того, для включения плагина Dokka Gradle v2 можно использовать каталог версий.

По умолчанию DGP v2 создает документацию в формате HTML. Чтобы создавать документацию в формате Javadoc или одновременно в форматах HTML и Javadoc, добавьте соответствующие плагины. Дополнительные сведения о плагинах см. в разделе Выбор формата вывода документации.

Включите помощники миграции

В файле gradle.properties проекта задайте следующее свойство Gradle, чтобы активировать DGP v2 с помощниками:

org.jetbrains.dokka.experimental.gradle.pluginMode=V2EnabledWithHelpers

Если в вашем проекте нет файла gradle.properties, создайте его в корневом каталоге проекта.

Это свойство активирует плагин DGP v2 с помощниками миграции. Эти помощники предотвращают ошибки компиляции, если в скриптах сборки есть ссылки на задачи из DGP v1, которые больше недоступны в DGP v2.

Помощники миграции не выполняют миграцию автоматически. Они лишь не дают скрипту сборки сломаться, пока вы переходите на новый API.

После завершения миграции отключите помощники миграции.

Синхронизируйте проект с Gradle

После включения DGP v2 и помощников миграции синхронизируйте проект с Gradle, чтобы убедиться, что DGP v2 применен правильно:

  • Если вы используете IntelliJ IDEA, нажмите кнопку Перезагрузить все проекты Gradle Reload button в окне инструмента Gradle.

  • Если вы используете Android Studio, выберите Файл | Синхронизировать проект с файлами Gradle.

Перенесите проект

После обновления плагина Dokka Gradle до v2 выполните действия по миграции, применимые к вашему проекту.

Настройте параметры конфигурации

В DGP v2 изменены некоторые параметры конфигурации Gradle. В файле build.gradle.kts настройте параметры конфигурации в соответствии с конфигурацией вашего проекта.

Конфигурация DSL верхнего уровня в DGP v2

Замените синтаксис конфигурации DGP v1 на конфигурацию DSL dokka {} верхнего уровня в DGP v2:

Конфигурация в DGP v1:

tasks.withType<DokkaTask>().configureEach {
    suppressInheritedMembers.set(true)
    failOnWarning.set(true)
    dokkaSourceSets {
        named("main") {
            moduleName.set("Project Name")
            includes.from("README.md")
            sourceLink {
                localDirectory.set(file("src/main/kotlin"))
                remoteUrl.set(URL("https://example.com/src"))
                remoteLineSuffix.set("#L")
            }
        }
    }
}

tasks.dokkaHtml {
    pluginConfiguration<DokkaBase, DokkaBaseConfiguration> {
        customStyleSheets.set(listOf("styles.css"))
        customAssets.set(listOf("logo.png"))
        footerMessage.set("(c) Your Company")
    }
}

Конфигурация в DGP v2:

Синтаксис файлов build.gradle.kts отличается от синтаксиса обычных файлов .kt (например, используемых для пользовательских плагинов Gradle), поскольку Kotlin DSL в Gradle использует типобезопасные аксессоры.

// build.gradle.kts

dokka {
    moduleName.set("Project Name")
    dokkaPublications.html {
        suppressInheritedMembers.set(true)
        failOnWarning.set(true)
    }
    dokkaSourceSets.main {
        includes.from("README.md")
        sourceLink {
            localDirectory.set(file("src/main/kotlin"))
            remoteUrl("https://example.com/src")
            remoteLineSuffix.set("#L")
        }
    }
    pluginsConfiguration.html {
        customStyleSheets.from("styles.css")
        customAssets.from("logo.png")
        footerMessage.set("(c) Your Company")
    }
}
// CustomPlugin.kt

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.jetbrains.dokka.gradle.DokkaExtension
import org.jetbrains.dokka.gradle.engine.plugins.DokkaHtmlPluginParameters

abstract class CustomPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        project.plugins.apply("org.jetbrains.dokka")

        project.extensions.configure(DokkaExtension::class.java) { dokka ->

            dokka.dokkaPublications.named("html") { publication ->
                publication.suppressInheritedMembers.set(true)
                publication.failOnWarning.set(true)
            }

            dokka.dokkaSourceSets.named("main") { dss ->
                dss.includes.from("README.md")
                dss.sourceLink {
                    it.localDirectory.set(project.file("src/main/kotlin"))
                    it.remoteUrl("https://example.com/src")
                    it.remoteLineSuffix.set("#L")
                }
            }

            dokka.pluginsConfiguration.named("html", DokkaHtmlPluginParameters::class.java) { html ->
                html.customStyleSheets.from("styles.css")
                html.customAssets.from("logo.png")
                html.footerMessage.set("(c) Your Company")
            }
        }
    }
}

Настройки видимости

Задайте для свойства documentedVisibilities значение VisibilityModifier.Public вместо Visibility.PUBLIC.

Конфигурация в DGP v1:

import org.jetbrains.dokka.DokkaConfiguration.Visibility

// ...
documentedVisibilities.set(
    setOf(Visibility.PUBLIC)
) 

Конфигурация в DGP v2:

import org.jetbrains.dokka.gradle.engine.parameters.VisibilityModifier

// ...
documentedVisibilities.set(
    setOf(VisibilityModifier.Public)
)

// OR

documentedVisibilities(VisibilityModifier.Public)

Кроме того, используйте вспомогательную функцию DGP v2 для добавления документируемых уровней видимости:

fun documentedVisibilities(vararg visibilities: VisibilityModifier): Unit =
    documentedVisibilities.set(visibilities.asList()) 

Ссылки на исходный код

Настройте ссылки на исходный код, чтобы из созданной документации можно было перейти к соответствующему исходному коду в удаленном репозитории. Для этой конфигурации используйте блок dokkaSourceSets.main{}.

Конфигурация в DGP v1:

tasks.withType<DokkaTask>().configureEach {
    dokkaSourceSets {
        named("main") {
            sourceLink {
                localDirectory.set(file("src/main/kotlin"))
                remoteUrl.set(URL("https://github.com/your-repo"))
                remoteLineSuffix.set("#L")
            }
        }
    }
}

Конфигурация в DGP v2:

Синтаксис файлов build.gradle.kts отличается от синтаксиса обычных файлов .kt (например, используемых для пользовательских плагинов Gradle), поскольку Kotlin DSL в Gradle использует типобезопасные аксессоры.

// build.gradle.kts

dokka {
    dokkaSourceSets.main {
        sourceLink {
            localDirectory.set(file("src/main/kotlin"))
            remoteUrl("https://github.com/your-repo")
            remoteLineSuffix.set("#L")
        }
    }
}
// CustomPlugin.kt

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.jetbrains.dokka.gradle.DokkaExtension

abstract class CustomPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        project.plugins.apply("org.jetbrains.dokka")
        project.extensions.configure(DokkaExtension::class.java) { dokka ->
            dokka.dokkaSourceSets.named("main") { dss ->
                dss.includes.from("README.md")
                dss.sourceLink {
                    it.localDirectory.set(project.file("src/main/kotlin"))
                    it.remoteUrl("https://example.com/src")
                    it.remoteLineSuffix.set("#L")
                }
            }
        }
    }
}

Поскольку конфигурация ссылки на исходный код изменилась, используйте класс URI вместо URL, чтобы указать URL-адрес удаленного репозитория.

Конфигурация в DGP v1:

remoteUrl.set(URL("https://github.com/your-repo"))

Конфигурация в DGP v2:

remoteUrl.set(URI("https://github.com/your-repo"))

// or

remoteUrl("https://github.com/your-repo")

Кроме того, в DGP v2 есть две вспомогательные функции для задания URL-адреса:

fun remoteUrl(@Language("http-url-reference") value: String): Unit =
    remoteUrl.set(URI(value))

// and

fun remoteUrl(value: Provider<String>): Unit =
    remoteUrl.set(value.map(::URI))

Ссылки на внешнюю документацию

Регистрируйте ссылки на внешнюю документацию с помощью метода register(), задавая каждую ссылку отдельно. API externalDocumentationLinks использует этот метод в соответствии с соглашениями DSL Gradle.

Конфигурация в DGP v1:

tasks.dokkaHtml {
    dokkaSourceSets {
        configureEach {
            externalDocumentationLink {
                url = URL("https://example.com/docs/")
                packageListUrl = File("/path/to/package-list").toURI().toURL()
            }
        }
    }
}

Конфигурация в DGP v2:

dokka {
    dokkaSourceSets.configureEach {
        externalDocumentationLinks.register("example-docs") {
            url("https://example.com/docs/")
            packageListUrl("https://example.com/docs/package-list")
        }
    }
}

Пользовательские ресурсы

Используйте свойство customAssets с коллекциями файлов (FileCollection) вместо списков (var List<File>).

Конфигурация в DGP v1:

customAssets = listOf(file("example.png"), file("example2.png"))

Конфигурация в DGP v2:

customAssets.from("example.png", "example2.png")

Выходной каталог

Укажите выходной каталог для созданной документации Dokka в блоке dokka {}.

Конфигурация в DGP v1:

tasks.dokkaHtml {
    outputDirectory.set(layout.buildDirectory.dir("dokkaDir"))
}

Конфигурация в DGP v2:

dokka {
    dokkaPublications.html {
        outputDirectory.set(layout.buildDirectory.dir("dokkaDir"))
    }
}

Выходной каталог для дополнительных файлов

Укажите выходной каталог и дополнительные файлы для проектов с одним и несколькими модулями в блоке dokka {}.

В DGP v2 конфигурация проектов с одним и несколькими модулями унифицирована. Вместо отдельной настройки задач dokkaHtml и dokkaHtmlMultiModule укажите параметры в dokkaPublications.html {} внутри блока dokka {}.

Для проектов с несколькими модулями задайте выходной каталог и дополнительные файлы (например, README.md) в конфигурации корневого проекта.

Конфигурация в DGP v1:

tasks.dokkaHtmlMultiModule {
    outputDirectory.set(rootDir.resolve("docs/api/0.x"))
    includes.from(project.layout.projectDirectory.file("README.md"))
}

Конфигурация в DGP v2:

Синтаксис файлов build.gradle.kts отличается от синтаксиса обычных файлов .kt (например, используемых для пользовательских плагинов Gradle), поскольку Kotlin DSL в Gradle использует типобезопасные аксессоры.

// build.gradle.kts

dokka {
    dokkaPublications.html {
        outputDirectory.set(rootDir.resolve("docs/api/0.x"))
        includes.from(project.layout.projectDirectory.file("README.md"))
    }
}
// CustomPlugin.kt

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.jetbrains.dokka.gradle.DokkaExtension

abstract class CustomPlugin : Plugin<Project> {
    override fun apply(project: Project) {
        project.plugins.apply("org.jetbrains.dokka")
        project.extensions.configure(DokkaExtension::class.java) { dokka ->
            dokka.dokkaPublications.named("html") { html ->
                html.outputDirectory.set(project.rootDir.resolve("docs/api/0.x"))
                html.includes.from(project.layout.projectDirectory.file("README.md"))
            }
        }
    }
}

Настройте плагины Dokka

Настройка встроенных плагинов Dokka с помощью JSON устарела и заменена типобезопасным DSL. Это изменение улучшает совместимость с системой инкрементальной сборки Gradle и отслеживание входных данных задач.

Конфигурация в DGP v1:

В DGP v1 плагины Dokka настраивались вручную с помощью JSON. Такой подход вызывал проблемы с регистрацией входных данных задач для проверок актуальности в Gradle.

Ниже приведен пример устаревшей конфигурации на основе JSON для плагина управления версиями Dokka:

tasks.dokkaHtmlMultiModule {
    pluginsMapConfiguration.set(
        mapOf(
            "org.jetbrains.dokka.versioning.VersioningPlugin" to """
                { "version": "1.2", "olderVersionsDir": "$projectDir/dokka-docs" }
                """.trimIndent()
        )
    )
}

Конфигурация в DGP v2:

В DGP v2 плагины Dokka настраиваются с помощью типобезопасного DSL. Чтобы настроить плагины Dokka типобезопасным способом, используйте блок pluginsConfiguration{}:

dokka {
    pluginsConfiguration {
        versioning {
            version.set("1.2")
            olderVersionsDir.set(projectDir.resolve("dokka-docs"))
        }
    }
}

Пример конфигурации DGP v2 см. в разделе плагин управления версиями Dokka.

DGP v2 позволяет расширять свои возможности, настраивая пользовательские плагины. Пользовательские плагины позволяют выполнять дополнительную обработку или изменять процесс создания документации.

Общий доступ к конфигурации Dokka для подпроектов

В DPG v2 больше не используются subprojects {} или allprojects {} для предоставления общего доступа к конфигурации подпроектов. В будущих версиях Gradle использование этих подходов приведет к ошибкам.

Выполните следующие действия, чтобы правильно предоставить общий доступ к конфигурации Dokka в проектах с несколькими модулями с существующими плагинами соглашений или без плагинов соглашений.

После предоставления общего доступа к конфигурации Dokka можно объединить документацию нескольких подпроектов в один результат. Дополнительные сведения см. в разделе Обновление агрегации документации в проектах с несколькими модулями.

Пример проекта с несколькими модулями см. в репозитории Dokka на GitHub.

Проекты с несколькими модулями без плагинов соглашений

Если в проекте не используются плагины соглашений, конфигурации Dokka все равно можно использовать совместно, настраивая каждый подпроект напрямую. Для этого нужно вручную задать общую конфигурацию в файле build.gradle.kts каждого подпроекта. Этот подход менее централизован, но позволяет избежать необходимости в дополнительной настройке, например в создании плагинов соглашений.

Если же в проекте используются плагины соглашений, конфигурацию Dokka в проектах с несколькими модулями также можно использовать совместно: создайте плагин соглашений в каталоге buildSrc, а затем примените его к подпроектам.

Настройте каталог buildSrc
  1. В корне проекта создайте каталог buildSrc, содержащий два файла:

    • settings.gradle.kts

    • build.gradle.kts

  2. Добавьте следующий фрагмент в файл buildSrc/settings.gradle.kts:

    rootProject.name = "buildSrc"
    
  3. Добавьте следующий фрагмент в файл buildSrc/build.gradle.kts:

    plugins {
        `kotlin-dsl`
    }
    
    repositories {
        mavenCentral()
        gradlePluginPortal()
    }
    
    dependencies {
        implementation("org.jetbrains.dokka:dokka-gradle-plugin:2.2.0")
    }   
    
Настройте плагин соглашений Dokka

После настройки каталога buildSrc:

  1. Создайте файл buildSrc/src/main/kotlin/dokka-convention.gradle.kts для размещения плагина соглашений.

  2. Добавьте следующий фрагмент в файл dokka-convention.gradle.kts:

    plugins {
        id("org.jetbrains.dokka") 
    }
    
    dokka {
        // The shared configuration goes here
    }
    

    Добавьте общую для всех подпроектов конфигурацию Dokka в блок dokka {}. Указывать версию Dokka не нужно: она уже задана в файле buildSrc/build.gradle.kts.

Примените плагин соглашений к подпроектам

Примените плагин соглашений Dokka ко всем подпроектам, добавив его в файл build.gradle.kts каждого подпроекта:

plugins {
    id("dokka-convention")
}

Проекты с несколькими модулями и плагинами соглашений

Если вы уже используете плагины соглашений, создайте отдельный плагин соглашений Dokka, следуя документации Gradle.

Затем выполните действия, чтобы настроить плагин соглашений Dokka и применить его ко всем подпроектам.

Обновите агрегацию документации в проектах с несколькими модулями

Dokka может объединять документацию нескольких подпроектов в один результат или публикацию.

Как объяснялось ранее, перед агрегацией документации примените плагин Dokka ко всем подпроектам, для которых создается документация.

В DGP v2 для агрегации используется блок dependencies {} вместо задач; его можно добавить в любой файл build.gradle.kts.

В DGP v1 агрегация неявно создавалась в корневом проекте. Чтобы воспроизвести это поведение в DGP v2, добавьте блок dependencies {} в файл build.gradle.kts корневого проекта.

Агрегация в DGP v1:

    tasks.dokkaHtmlMultiModule {
        // ...
    }

Агрегация в DGP v2:

dependencies {
    dokka(project(":some-subproject:"))
    dokka(project(":another-subproject:"))
}

Измените каталог агрегированной документации

При агрегации подпроектов с помощью DGP каждый подпроект размещается в собственном подкаталоге агрегированной документации.

В DGP v2 механизм агрегации обновлен для лучшего соответствия соглашениям Gradle. Теперь DGP v2 сохраняет полный путь к каталогу подпроекта, чтобы избежать конфликтов при агрегации документации в любом месте.

Каталог агрегации в DGP v1:

В DGP v1 агрегированная документация помещалась в каталог с упрощенной структурой. Например, если в проекте агрегация выполняется в :turbo-lib и есть вложенный подпроект :turbo-lib:maths, созданная документация помещалась по следующему пути:

turbo-lib/build/dokka/html/maths/

Каталог агрегации в DGP v2:

DGP v2 сохраняет полную структуру проекта, обеспечивая уникальный каталог для каждого подпроекта. Теперь та же агрегированная документация имеет следующую структуру:

turbo-lib/build/dokka/html/turbo-lib/maths/

Это изменение предотвращает конфликты между подпроектами с одинаковыми именами. Однако из-за изменения структуры каталогов внешние ссылки могут устареть, что может привести к ошибкам 404.

Вернитесь к структуре каталогов DGP v1

Если проект зависит от структуры каталогов, используемой в DGP v1, можно вернуть это поведение, указав каталог подпроекта вручную. Добавьте следующую конфигурацию в файл build.gradle.kts каждого подпроекта:

// /turbo-lib/maths/build.gradle.kts

plugins {
    id("org.jetbrains.dokka")
}

dokka {
    // Overrides the subproject directory to match the V1 structure
    modulePath.set("maths")
}

Создайте документацию с помощью обновленной задачи

В DGP v2 переименованы задачи Gradle, создающие документацию API.

Задача в DGP v1:

./gradlew dokkaHtml

// or

./gradlew dokkaHtmlMultiModule

Задача в DGP v2:

./gradlew :dokkaGenerate

Задача dokkaGenerate создает документацию API в каталоге build/dokka/.

В DGP v2 задача dokkaGenerate работает как для проектов с одним модулем, так и для проектов с несколькими модулями. Для создания вывода в формате HTML, Javadoc или одновременно в обоих форматах можно использовать разные задачи. Дополнительные сведения см. в разделе Выбор формата вывода документации.

Выберите формат вывода документации

Формат вывода Javadoc находится на стадии Alpha. При его использовании могут возникнуть ошибки и проблемы при миграции. Успешная интеграция с инструментами, принимающими Javadoc в качестве входных данных, не гарантируется. Используйте его на свой страх и риск.

Формат вывода DGP v2 по умолчанию — HTML. Однако можно выбрать создание документации API в формате HTML, Javadoc или одновременно в обоих форматах:

  1. Поместите соответствующий плагин id в блок plugins {} файла build.gradle.kts проекта:

    plugins {
        // Generates HTML documentation
        id("org.jetbrains.dokka") version "2.2.0"
    
        // Generates Javadoc documentation
        id("org.jetbrains.dokka-javadoc") version "2.2.0"
    
        // Keeping both plugin IDs generates both formats
    }
    
  2. Запустите соответствующую задачу Gradle.

Ниже приведен список плагинов id и задач Gradle для каждого формата:

HTML

Javadoc

Оба формата

Плагин id

id("org.jetbrains.dokka")

id("org.jetbrains.dokka-javadoc")

Используйте плагины HTML и Javadoc

Задача Gradle

./gradlew :dokkaGeneratePublicationHtml

./gradlew :dokkaGeneratePublicationJavadoc

./gradlew :dokkaGenerate

Задача dokkaGenerate создает документацию во всех доступных форматах в зависимости от примененных плагинов. Если применены плагины HTML и Javadoc, можно создать только документацию HTML, запустив задачу dokkaGeneratePublicationHtml, или только Javadoc, запустив задачу dokkaGeneratePublicationJavadoc.

Если вы используете IntelliJ IDEA, может отображаться задача Gradle dokkaGenerateHtml. Эта задача является псевдонимом задачи dokkaGeneratePublicationHtml. Обе задачи выполняют совершенно одинаковую операцию.

Учитывайте устаревшие и удаленные возможности

  • Поддержка форматов вывода: DGP v2 поддерживает только форматы вывода HTML и Javadoc. Экспериментальные форматы, такие как Markdown и Jekyll, больше не поддерживаются.

  • Задача-сборщик: задача DokkaCollectorTask удалена. Теперь нужно отдельно создавать документацию для каждого подпроекта, а затем при необходимости агрегировать документацию.

Завершение миграции

После миграции проекта выполните следующие действия, чтобы завершить процесс и повысить производительность.

Установите флаг opt-in

После успешной миграции установите следующий флаг opt-in без вспомогательных средств в файле проекта gradle.properties:

org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled

Если вы удалили ссылки на задачи Gradle из DGP v1, которые больше недоступны в DGP v2, ошибок компиляции, связанных с этим, возникнуть не должно.

Включите кэш сборки и кэш конфигурации

Теперь DGP v2 поддерживает кэш сборки и кэш конфигурации Gradle, что повышает производительность сборки.

  • Чтобы включить кэш сборки, следуйте инструкциям в документации по кэшу сборки Gradle.

  • Чтобы включить кэш конфигурации, следуйте инструкциям в документации по кэшу конфигурации Gradle.

Что дальше

  • Изучите другие примеры проектов DGP v2.

  • Начало работы с Dokka.

  • Подробнее о плагинах Dokka.

26 марта 2026 г.
Устранение неполадок Dokka для GradleMaven

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/dokka-migration.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API