Spec-Zone.ru › Kotlin 2

Gradle

Это руководство относится к режиму v2 плагина Dokka Gradle (DGP). Предыдущий режим DGP v1 больше не поддерживается. Если вы переходите с режима v1 на режим v2, см. руководство по миграции.

Для создания документации проекта на основе Gradle можно использовать плагин Gradle для Dokka.

Плагин Dokka Gradle (DGP) включает базовую автоматическую настройку проекта, содержит задачи Gradle для создания документации и предоставляет параметры конфигурации для настройки выходных данных.

Вы можете поэкспериментировать с Dokka и изучить, как настроить её для различных проектов, в наших примерах проектов Gradle.

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

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

Инструмент

Версия

Gradle

7.6 или выше

Плагин Android Gradle

7.0 или выше

Плагин Kotlin Gradle

1.9 или выше

Подключение Dokka

Рекомендуемый способ подключить плагин Gradle для Dokka — использовать блок plugins. Добавьте его в блок plugins {} файла build.gradle.kts вашего проекта:

plugins {
    id("org.jetbrains.dokka") version "2.2.0"
}
plugins {
    id 'org.jetbrains.dokka' version '2.2.0'
}

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

  • Внутри Dokka использует плагин Kotlin Gradle для автоматической настройки наборов исходного кода, для которых создаётся документация. Обязательно подключите плагин Kotlin Gradle или настройте наборы исходного кода вручную.

  • Если вы используете Dokka в предварительно скомпилированном плагине скрипта, добавьте плагин Kotlin Gradle в качестве зависимости, чтобы обеспечить его корректную работу.

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

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

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

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

Создание документации

Плагин Dokka Gradle включает встроенные форматы вывода HTML и Javadoc.

Для создания документации используйте следующую задачу Gradle:

./gradlew :dokkaGenerate

Основные особенности задачи Gradle dokkaGenerate:

  • Эта задача создаёт документацию как для однопроектных, так и для многопроектных сборок.

  • По умолчанию документация создаётся в формате HTML. Также можно создать документацию в формате Javadoc или одновременно в форматах HTML и Javadoc, добавив соответствующие плагины.

  • Созданная документация автоматически помещается в каталог build/dokka/html как для однопроектных, так и для многопроектных сборок. Вы можете изменить расположение (outputDirectory).

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

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

Можно создавать документацию 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. Обе задачи выполняют одну и ту же операцию.

Объединение выходных данных документации в многопроектных сборках

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

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

Чтобы объединить документацию нескольких подпроектов, добавьте блок dependencies {} в файл build.gradle.kts корневого проекта:

dependencies {
    dokka(project(":childProjectA:"))
    dokka(project(":childProjectB:"))
}

Предположим, что проект имеет следующую структуру:

.
└── parentProject/
    ├── childProjectA/
    │   └── demo/
    │       └── ChildProjectAClass.kt
    └── childProjectB/
        └── demo/
            └── ChildProjectBClass.kt

Созданная документация объединяется следующим образом:

Screenshot for output of dokkaHtmlMultiModule task

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

Каталог объединённой документации

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

Например, если документация объединяется в :turbo-lib и проект содержит вложенный подпроект :turbo-lib:maths, созданная документация размещается по следующему пути:

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

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

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

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

dokka {
    // Overrides the subproject directory
    modulePath.set("maths")
}

Эта конфигурация изменяет путь создания документации для модуля :turbo-lib:maths на turbo-lib/build/dokka/html/maths/.

Создание javadoc.jar

Если вы хотите опубликовать библиотеку в репозитории, возможно, потребуется предоставить файл javadoc.jar со справочной документацией API вашей библиотеки.

Например, если вы хотите опубликовать библиотеку в Maven Central, вы обязаны предоставить файл javadoc.jar вместе с проектом. Однако это правило действует не во всех репозиториях.

Плагин Gradle для Dokka не предоставляет встроенных средств для этого, но задачу можно решить с помощью пользовательских задач Gradle. Одна задача создаёт документацию в формате HTML, а другая — в формате Javadoc:

// To generate documentation in HTML
val dokkaHtmlJar by tasks.registering(Jar::class) {
    description = "A HTML Documentation JAR containing Dokka HTML"
    from(tasks.dokkaGeneratePublicationHtml.flatMap { it.outputDirectory })
    archiveClassifier.set("html-doc")
}

// To generate documentation in Javadoc
val dokkaJavadocJar by tasks.registering(Jar::class) {
    description = "A Javadoc JAR containing Dokka Javadoc"
    from(tasks.dokkaGeneratePublicationJavadoc.flatMap { it.outputDirectory })
    archiveClassifier.set("javadoc")
}
// To generate documentation in HTML
tasks.register('dokkaHtmlJar', Jar) {
    description = 'A HTML Documentation JAR containing Dokka HTML'
    from(tasks.named('dokkaGeneratePublicationHtml').flatMap { it.outputDirectory })
    archiveClassifier.set('html-doc')
}

// To generate documentation in Javadoc
tasks.register('dokkaJavadocJar', Jar) {
    description = 'A Javadoc JAR containing Dokka Javadoc'
    from(tasks.named('dokkaGeneratePublicationJavadoc').flatMap { it.outputDirectory })
    archiveClassifier.set('javadoc')
}

Если вы публикуете библиотеку в Maven Central, можно воспользоваться такими сервисами, как javadoc.io, чтобы бесплатно разместить документацию API библиотеки без какой-либо настройки. Сервис берёт страницы документации непосредственно из javadoc.jar. Он хорошо работает с форматом HTML, как показано в этом примере.

Примеры конфигурации

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

Информацию о простых проектах с плоской структурой, в корне которых находится только один файл build.gradle.kts или build.gradle, см. в разделе Настройка однопроектной сборки.

Информацию о более сложной сборке с подпроектами и несколькими вложенными файлами build.gradle.kts или build.gradle см. в разделе Настройка многопроектной сборки.

Настройка однопроектной сборки

Однопроектные сборки обычно содержат только один файл build.gradle.kts или build.gradle в корне проекта. Они могут быть одноцелевыми или многоплатформенными и обычно имеют следующую структуру:

Одноплатформенный проект:

.
├── build.gradle.kts
└── src/
    └── main/
        └── kotlin/
            └── HelloWorld.kt

Многоплатформенный проект:

.
├── build.gradle.kts
└── src/
    ├── commonMain/
    │   └── kotlin/
    │       └── Common.kt
    ├── jvmMain/
    │   └── kotlin/
    │       └── JvmUtils.kt
    └── nativeMain/
        └── kotlin/
            └── NativeUtils.kt

Одноплатформенный проект:

.
├── build.gradle
└── src/
    └── main/
        └── kotlin/
            └── HelloWorld.kt

Многоплатформенный проект:

.
├── build.gradle
└── src/
    ├── commonMain/
    │   └── kotlin/
    │       └── Common.kt
    ├── jvmMain/
    │   └── kotlin/
    │       └── JvmUtils.kt
    └── nativeMain/
        └── kotlin/
            └── NativeUtils.kt

Подключите плагин Dokka Gradle в корневом файле build.gradle.kts и настройте его с помощью DSL верхнего уровня dokka {}:

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

dokka {
    dokkaPublications.html {
        moduleName.set("MyProject")
        outputDirectory.set(layout.buildDirectory.dir("documentation/html"))
        includes.from("README.md")
   }

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

Внутри ./build.gradle:

plugins {
    id 'org.jetbrains.dokka' version '2.2.0'
}

dokka {
    dokkaPublications {
        html {
            moduleName.set("MyProject")
            outputDirectory.set(layout.buildDirectory.dir("documentation/html"))
            includes.from("README.md")
        }
    }

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

Эта конфигурация подключает Dokka к проекту, задаёт каталог для выходных данных документации и определяет основной набор исходного кода. Её можно расширить, добавив пользовательские ресурсы, фильтры видимости или конфигурации плагинов в тот же блок dokka {}. Дополнительную информацию см. в разделе Параметры конфигурации.

Настройка многопроектной сборки

Многопроектные сборки обычно содержат несколько вложенных файлов build.gradle.kts и имеют структуру, похожую на следующую:

.
├── build.gradle.kts
├── settings.gradle.kts
├── subproject-A/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           └── kotlin/
│               └── HelloFromA.kt
└── subproject-B/
    ├── build.gradle.kts
    └── src/
        └── main/
            └── kotlin/
                └── HelloFromB.kt
.
├── build.gradle
├── settings.gradle
├── subproject-A/
│   ├── build.gradle
│   └── src/
│       └── main/
│           └── kotlin/
│               └── HelloFromA.kt
└── subproject-B/
    ├── build.gradle
    └── src/
        └── main/
            └── kotlin/
                └── HelloFromB.kt

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

Существует два способа настроить Dokka в многопроектных сборках:

  • Общая конфигурация с помощью плагина соглашений (рекомендуется): создание плагина соглашений и его подключение ко всем подпроектам. Это позволяет централизовать настройки Dokka.

  • Ручная настройка: подключение плагина Dokka и повторение одного и того же блока dokka {} в каждом подпроекте. Плагины соглашений не требуются.

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

Пример многопроектной сборки см. в репозитории Dokka на GitHub.

Общая конфигурация с помощью плагина соглашений

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

Настройка каталога 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 настройте плагин соглашений Dokka:

  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, вручную скопировав один и тот же блок dokka {} block в каждый подпроект:

  1. Подключите плагин Dokka в файле build.gradle.kts каждого подпроекта:

    plugins {
        id("org.jetbrains.dokka") version "2.2.0"
    }
    
  2. Объявите общую конфигурацию в блоке dokka {} каждого подпроекта. Поскольку конфигурация не централизована с помощью плагина соглашений, необходимо дублировать во всех подпроектах те параметры, которые должны быть общими. Дополнительную информацию см. в разделе параметры конфигурации.

Настройка родительского проекта

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

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

dokka {
    // Sets properties for the whole project
    dokkaPublications.html {
        moduleName.set("My Project")
        outputDirectory.set(layout.buildDirectory.dir("docs/html"))
        includes.from("README.md")
    }

    dokkaSourceSets.configureEach {
        documentedVisibilities.set(setOf(VisibilityModifier.Public)) // OR documentedVisibilities(VisibilityModifier.Public)    
    }
}

// Aggregates subproject documentation
dependencies {
    dokka(project(":childProjectA"))
    dokka(project(":childProjectB"))
}

Кроме того, в каждом подпроекте может быть собственный блок dokka {} для настройки индивидуальных параметров. В следующем примере подпроект подключает плагин Dokka, задаёт собственное имя и добавляет дополнительную документацию из файла README.md:

// subproject/build.gradle.kts
plugins {
    id("org.jetbrains.dokka")
}

dokka {
    dokkaPublications.html {
        moduleName.set("Child Project A")
        includes.from("README.md")
    }
}
18 декабря 2025 г.
Начало работы с DokkaПараметры конфигурации Dokka Gradle

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

Spec-Zone.ru

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