dokka [![official JetBrains project](https://jb.gg/badges/official.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub)
[![TeamCity (build status)](https://img.shields.io/teamcity/http/teamcity.jetbrains.com/s/Kotlin_Dokka_DokkaAntMavenGradle.svg)](https://teamcity.jetbrains.com/viewType.html?buildTypeId=Kotlin_Dokka_DokkaAntMavenGradle&branch_KotlinTools_Dokka=%3Cdefault%3E&tab=buildTypeStatusDiv) [ ![Download](https://api.bintray.com/packages/kotlin/dokka/dokka/images/download.svg) ](https://bintray.com/kotlin/dokka/dokka/_latestVersion)
=====
Dokka is a documentation engine for Kotlin, performing the same function as javadoc for Java.
Just like Kotlin itself, Dokka fully supports mixed-language Java/Kotlin projects. It understands
standard Javadoc comments in Java files and [KDoc comments](https://kotlinlang.org/docs/reference/kotlin-doc.html) in Kotlin files,
and can generate documentation in multiple formats including standard Javadoc, HTML and Markdown.
## Using Dokka
### Using the Gradle plugin
```groovy
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "org.jetbrains.dokka:dokka-gradle-plugin:${dokka_version}"
}
}
apply plugin: 'org.jetbrains.dokka'
```
The plugin adds a task named "dokka" to the project.
Minimal dokka configuration:
```groovy
dokka {
outputFormat = 'html'
outputDirectory = "$buildDir/javadoc"
}
```
[Output formats](#output_formats)
The available configuration options are shown below:
```groovy
dokka {
moduleName = 'data'
outputFormat = 'html'
outputDirectory = "$buildDir/javadoc"
// These tasks will be used to determine source directories and classpath
kotlinTasks {
defaultKotlinTasks() + [':some:otherCompileKotlin', project("another").compileKotlin]
}
// List of files with module and package documentation
// https://kotlinlang.org/docs/reference/kotlin-doc.html#module-and-package-documentation
includes = ['packages.md', 'extra.md']
// The list of files or directories containing sample code (referenced with @sample tags)
samples = ['samples/basic.kt', 'samples/advanced.kt']
jdkVersion = 6 // Used for linking to JDK
// Use default or set to custom path to cache directory
// to enable package-list caching
// When set to default, caches stored in $USER_HOME/.cache/dokka
cacheRoot = 'default'
// Use to include or exclude non public members.
includeNonPublic = false
// Do not output deprecated members. Applies globally, can be overridden by packageOptions
skipDeprecated = false
// Emit warnings about not documented members. Applies globally, also can be overridden by packageOptions
reportUndocumented = true
skipEmptyPackages = true // Do not create index pages for empty packages
impliedPlatforms = ["JVM"] // See platforms section of documentation
// Manual adding files to classpath
// This property not overrides classpath collected from kotlinTasks but appends to it
classpath = [new File("$buildDir/other.jar")]
// By default, sourceRoots is taken from kotlinTasks, following roots will be appended to it
// Short form sourceRoots
sourceDirs = files('src/main/kotlin')
// By default, sourceRoots is taken from kotlinTasks, following roots will be appended to it
// Full form sourceRoot declaration
// Repeat for multiple sourceRoots
sourceRoot {
// Path to source root
path = "src"
// See platforms section of documentation
platforms = ["JVM"]
}
// Specifies the location of the project source code on the Web.
// If provided, Dokka generates "source" links for each declaration.
// Repeat for multiple mappings
linkMapping {
// Unix based directory relative path to the root of the project (where you execute gradle respectively).
dir = "src/main/kotlin" // or simply "./"
// URL showing where the source code can be accessed through the web browser
url = "https://github.com/cy6erGn0m/vertx3-lang-kotlin/blob/master/src/main/kotlin" //remove src/main/kotlin if you use "./" above
// Suffix which is used to append the line number to the URL. Use #L for GitHub
suffix = "#L"
}
// No default documentation link to kotlin-stdlib
noStdlibLink = false
// Allows linking to documentation of the project's dependencies (generated with Javadoc or Dokka)
// Repeat for multiple links
externalDocumentationLink {
// Root URL of the generated documentation to link with. The trailing slash is required!
url = new URL("https://example.com/docs/")
// If package-list file located in non-standard location
// packageListUrl = new URL("file:///home/user/localdocs/package-list")
}
// Allows to customize documentation generation options on a per-package basis
// Repeat for multiple packageOptions
packageOptions {
prefix = "kotlin" // will match kotlin and all sub-packages of it
// All options are optional, default values are below:
skipDeprecated = false
reportUndocumented = true // Emit warnings about not documented members
includeNonPublic = false
}
// Suppress a package
packageOptions {
prefix = "kotlin.internal" // will match kotlin.internal and all sub-packages of it
suppress = true
}
}
```
To generate the documentation, use the `dokka` Gradle task:
```bash
./gradlew dokka
```
More dokka tasks can be added to a project like this:
```groovy
task dokkaJavadoc(type: org.jetbrains.dokka.gradle.DokkaTask) {
outputFormat = 'javadoc'
outputDirectory = "$buildDir/javadoc"
}
```
Please see the [Dokka Gradle example project](https://github.com/JetBrains/kotlin-examples/tree/master/gradle/dokka-gradle-example) for an example.
#### Dokka Runtime
If you are using Gradle plugin and you want to change the version of Dokka, you can do it by setting `dokkaRuntime`:
```groovy
buildscript {
...
}
apply plugin: 'org.jetbrains.dokka'
repositories {
jcenter()
}
dependencies {
dokkaRuntime "org.jetbrains.dokka:dokka-fatjar:0.9.18"
}
```
#### FAQ
Please see the [FAQ](https://github.com/Kotlin/dokka/wiki/faq).
#### Android
If you are using Android there is a separate Gradle plugin. Just make sure you apply the plugin after
`com.android.library` and `kotlin-android`.
```groovy
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:${dokka_version}"
}
}
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'org.jetbrains.dokka-android'
```
### Using the Maven plugin
The Maven plugin is available in JCenter. You need to add the JCenter repository to the list of plugin repositories if it's not there:
```xml
jcenterJCenterhttps://jcenter.bintray.com/
```
Minimal Maven configuration is
```xml
org.jetbrains.dokkadokka-maven-plugin${dokka.version}pre-sitedokka
```
By default files will be generated in `target/dokka`.
The following goals are provided by the plugin:
* `dokka:dokka` - generate HTML documentation in Dokka format (showing declarations in Kotlin syntax);
* `dokka:javadoc` - generate HTML documentation in JavaDoc format (showing declarations in Java syntax);
* `dokka:javadocJar` - generate a .jar file with JavaDoc format documentation.
The available configuration options are shown below:
```xml
org.jetbrains.dokkadokka-maven-plugin${dokka.version}pre-sitedokkafalsedatahtmlsome/out/dirdefaultpackages.mdextra.mdsrc/test/samples6falsetruetrueJVMsrc/main/kotlinsrc/main/kotlinJVM${project.basedir}/src/main/kotlinhttps://github.com/cy6erGn0m/vertx3-lang-kotlin/blob/master/src/main/kotlin#Lfalsehttps://example.com/docs/kotlinfalsetruefalse
```
Please see the [Dokka Maven example project](https://github.com/JetBrains/kotlin-examples/tree/master/maven/dokka-maven-example) for an example.
[Output formats](#output_formats)
### Using the Ant task
The Ant task definition is also contained in the dokka-fatjar.jar referenced above. Here's an example of using it:
```xml
```
The Ant task supports the following attributes:
* `outputDir` - the output directory where the documentation is generated
* `outputFormat` - the output format (see the list of supported formats above)
* `classpath` - list of directories or .jar files to include in the classpath (used for resolving references)
* `samples` - list of directories containing sample code (documentation for those directories is not generated but declarations from them can be referenced using the `@sample` tag)
* `moduleName` - the name of the module being documented (used as the root directory of the generated documentation)
* `include` - names of files containing the documentation for the module and individual packages
* `skipDeprecated` - if set, deprecated elements are not included in the generated documentation
* `jdkVersion` - version for linking to JDK
* `impliedPlatforms` - See [platforms](#platforms) section
* `` - analogue of src, but allows to specify [platforms](#platforms)
* `` -
Per package options for package `kotlin` and sub-packages of it
* `noStdlibLink` - No default documentation link to kotlin-stdlib
* `` -
linking to external documentation, packageListUrl should be used if package-list located not in standard location
* `cacheRoot` - Use `default` or set to custom path to cache directory to enable package-list caching. When set to `default`, caches stored in $USER_HOME/.cache/dokka
### Using the Command Line
To run Dokka from the command line, download the [Dokka jar](https://github.com/Kotlin/dokka/releases/download/0.9.10/dokka-fatjar.jar).
To generate documentation, run the following command:
java -jar dokka-fatjar.jar