Skip to content

CLI

如果由于某些原因您无法使用 GradleMaven 构建工具,Dokka 提供了命令行 (CLI) 运行器来生成文档。

相比之下,它拥有与 Dokka 的 Gradle 插件相同(甚至更多)的功能。尽管设置起来要困难得多,因为没有自动配置,尤其是在多平台和多模块环境中。

开始使用

CLI 运行器作为一个独立的可运行 Artifact 发布到 Maven Central。

您可以在 Maven Central 上找到它,或者 直接下载

dokka-cli-2.0.0.jar 文件保存到您的计算机后,使用 -help 选项运行它以查看所有可用的配置选项及其描述:

Bash
java -jar dokka-cli-2.0.0.jar -help

它也适用于一些嵌套选项,例如 -sourceSet

Bash
java -jar dokka-cli-2.0.0.jar -sourceSet -help

生成文档

前提条件

由于没有构建工具来管理依赖项,您必须自己提供依赖项的 .jar 文件。

以下是您为任何输出格式所需的依赖项:

Artifact版本链接
org.jetbrains.dokkadokka-base2.0.0下载
org.jetbrains.dokkaanalysis-kotlin-descriptors2.0.0下载

以下是 HTML 输出格式所需的额外依赖项:

Artifact版本链接
org.jetbrains.kotlinxkotlinx-html-jvm0.8.0下载
org.freemarkerfreemarker2.3.31下载

使用命令行选项运行

您可以传递命令行选项来配置 CLI 运行器。

至少需要提供以下选项:

  • -pluginsClasspath - 下载的依赖项的绝对/相对路径列表,用分号 ; 分隔
  • -sourceSet - 要生成文档的源代码的绝对路径
  • -outputDir - 文档输出目录的绝对/相对路径
Bash
java -jar dokka-cli-2.0.0.jar \
     -pluginsClasspath "./dokka-base-2.0.0.jar;./analysis-kotlin-descriptors-2.0.0.jar;./kotlinx-html-jvm-0.8.0.jar;./freemarker-2.3.31.jar" \
     -sourceSet "-src /home/myCoolProject/src/main/kotlin" \
     -outputDir "./dokka/html"

执行上述示例将在 HTML 输出格式中生成文档。

更多配置详情,请参阅 命令行选项

使用 JSON 配置运行

可以通过 JSON 配置 CLI 运行器。在这种情况下,您需要将 JSON 配置文件作为第一个也是唯一的参数提供绝对/相对路径。所有其他配置选项都将从中解析。

Bash
java -jar dokka-cli-2.0.0.jar dokka-configuration.json

至少,您需要以下 JSON 配置文件:

json
{
  "outputDir": "./dokka/html",
  "sourceSets": [
    {
      "sourceSetID": {
        "scopeId": "moduleName",
        "sourceSetName": "main"
      },
      "sourceRoots": [
        "/home/myCoolProject/src/main/kotlin"
      ]
    }
  ],
  "pluginsClasspath": [
    "./dokka-base-2.0.0.jar",
    "./kotlinx-html-jvm-0.8.0.jar",
    "./analysis-kotlin-descriptors-2.0.0.jar",
    "./freemarker-2.3.31.jar"
  ]
}

更多详情,请参阅 JSON 配置选项

其他输出格式

默认情况下,dokka-base Artifact 只包含 HTML 输出格式。

所有其他输出格式都作为 Dokka 插件 实现。为了使用它们,您必须将它们放到插件类路径中。

例如,如果您想以实验性的 GFM 输出格式生成文档,您需要下载并传递 gfm-plugin 的 JAR(下载)到 pluginsClasspath 配置选项中。

通过命令行选项:

Shell
java -jar dokka-cli-2.0.0.jar \
     -pluginsClasspath "./dokka-base-2.0.0.jar;...;./gfm-plugin-2.0.0.jar" \
     ...

通过 JSON 配置:

json
{
  ...
  "pluginsClasspath": [
    "./dokka-base-2.0.0.jar",
    "...",
    "./gfm-plugin-2.0.0.jar"
  ],
  ...
}

将 GFM 插件传递到 pluginsClasspath 后,CLI 运行器将以 GFM 输出格式生成文档。

更多信息,请参阅 MarkdownJavadoc 页面。

命令行选项

要查看所有可能的命令行选项及其详细描述,请运行:

Bash
java -jar dokka-cli-2.0.0.jar -help

简要概述:

选项描述
moduleName项目/模块的名称。
moduleVersion文档化版本。
outputDir输出目录路径,默认为 ./dokka
sourceSetDokka 源集的配置。包含嵌套配置选项。
pluginsConfigurationDokka 插件的配置。
pluginsClasspath包含 Dokka 插件及其依赖项的 JAR 列表。接受用分号分隔的多个路径。
offlineMode是否通过网络解析远程文件/链接。
failOnWarning如果 Dokka 发出警告或错误,是否使文档生成失败。
delayTemplateSubstitution是否延迟某些元素的替换。用于多模块项目的增量构建。
noSuppressObviousFunctions是否抑制从 kotlin.Anyjava.lang.Object 继承的明显函数。
includes包含模块和包文档的 Markdown 文件。接受用分号分隔的多个值。
suppressInheritedMembers是否抑制给定类中未显式重写的继承成员。
globalPackageOptions全局包配置选项列表,格式为 "matchingRegex,-deprecated,-privateApi,+warnUndocumented,+suppress;+visibility:PUBLIC;..."。接受用分号分隔的多个值。
globalLinks全局外部文档链接,格式为 {url}^{packageListUrl}。接受用 ^^ 分隔的多个值。
globalSrcLink源代码目录与用于浏览代码的 Web 服务之间的全局映射。接受用分号分隔的多个路径。
helpSourceSet打印嵌套 -sourceSet 配置的帮助信息。
loggingLevel日志级别,可能的值:DEBUG, PROGRESS, INFO, WARN, ERROR
help, h使用信息。

源集选项

要查看嵌套 -sourceSet 配置的命令行选项列表,请运行:

Bash
java -jar dokka-cli-2.0.0.jar -sourceSet -help

简要概述:

选项描述
sourceSetName源集的名称。
displayName源集的显示名称,内部和外部都使用。
classpath用于分析和交互式示例的类路径。接受用分号分隔的多个路径。
src要分析和文档化的源代码根目录。接受用分号分隔的多个路径。
dependentSourceSets依赖源集的名称,格式为 moduleName/sourceSetName。接受用分号分隔的多个值。
samples包含示例函数的目录或文件列表。接受用分号分隔的多个路径。
includes包含 模块和包文档 的 Markdown 文件。接受用分号分隔的多个路径。
documentedVisibilities应被文档化的可见性。接受用分号分隔的多个值。可能的值:PUBLICPRIVATEPROTECTEDINTERNALPACKAGE
reportUndocumented是否报告未文档化声明。
noSkipEmptyPackages是否为空包创建页面。
skipDeprecated是否跳过已废弃声明。
jdkVersion用于链接到 JDK Javadoc 的 JDK 版本。
languageVersion用于设置分析和示例的 Kotlin 语言版本。
apiVersion用于设置分析和示例的 Kotlin API 版本。
noStdlibLink是否生成指向 Kotlin 标准库的链接。
noJdkLink是否生成指向 JDK Javadoc 的链接。
suppressedFiles要抑制的文件路径。接受用分号分隔的多个路径。
analysisPlatform用于设置分析的平台。
perPackageOptions包源集配置列表,格式为 matchingRegexp,-deprecated,-privateApi,+warnUndocumented,+suppress;...。接受用分号分隔的多个值。
externalDocumentationLinks外部文档链接,格式为 {url}^{packageListUrl}。接受用 ^^ 分隔的多个值。
srcLink源代码目录与用于浏览代码的 Web 服务之间的映射。接受用分号分隔的多个路径。

JSON 配置

以下是每个配置部分的一些示例和详细描述。您还可以在页面底部找到应用了 所有配置选项 的示例。

通用配置

json
{
  "moduleName": "Dokka Example",
  "moduleVersion": null,
  "outputDir": "./build/dokka/html",
  "failOnWarning": false,
  "suppressObviousFunctions": true,
  "suppressInheritedMembers": false,
  "offlineMode": false,
  "includes": [
    "module.md"
  ],
  "sourceLinks":  [
    { "_comment": "Options are described in a separate section" }
  ],
  "perPackageOptions": [
    { "_comment": "Options are described in a separate section" }
  ],
  "externalDocumentationLinks":  [
    { "_comment": "Options are described in a separate section" }
  ],
  "sourceSets": [
    { "_comment": "Options are described in a separate section" }
  ],
  "pluginsClasspath": [
    "./dokka-base-2.0.0.jar",
    "./kotlinx-html-jvm-0.8.0.jar",
    "./analysis-kotlin-descriptors-2.0.0.jar",
    "./freemarker-2.3.31.jar"
  ]
}
moduleName

用于指代模块的显示名称。它用于目录、导航、日志等。

默认值:root

moduleVersion

模块版本。

默认值:空

outputDirectory

生成文档的目录,无论输出格式如何。

默认值:./dokka

failOnWarning

如果 Dokka 发出警告或错误,是否使文档生成失败。 进程会先等待所有错误和警告发出。

此设置与 reportUndocumented 配合良好

默认值:false

suppressObviousFunctions

是否抑制明显函数。

如果函数符合以下条件,则被视为明显函数:
  • 继承自 kotlin.AnyKotlin.Enumjava.lang.Objectjava.lang.Enum,例如 equalshashCodetoString
  • 合成(由编译器生成)且没有任何文档,例如 dataClass.componentNdataClass.copy

默认值:true

suppressInheritedMembers

是否抑制给定类中未显式重写的继承成员。

注意:这可以抑制诸如 equals / hashCode / toString 之类的函数, 但无法抑制诸如 dataClass.componentNdataClass.copy 之类的合成函数。请使用 suppressObviousFunctions 来处理。

默认值:false

offlineMode

是否通过您的网络解析远程文件/链接。

这包括用于生成外部文档链接的 package-lists。 例如,为了使标准库中的类可点击。

将此设置为 true 在某些情况下可以显著加快构建时间, 但也可能降低文档质量和用户体验。例如,通过 不解析来自您的依赖项(包括标准库)的类/成员链接。

注意:您可以在本地缓存获取的文件,并将其作为本地路径提供给 Dokka。请参阅 externalDocumentationLinks 部分。

默认值:false

includes

包含 模块和包文档的 Markdown 文件列表。

指定文件的内容将被解析并嵌入到文档中作为模块和包的描述。

这可以按包进行配置。

sourceSets

Kotlin 源集的单独和额外配置。

有关可能选项的列表,请参阅 源集配置

sourceLinks

适用于所有源集的源码链接的全局配置。

有关可能选项的列表,请参阅 源码链接配置

perPackageOptions

无论包所在的源集如何,适用于匹配包的全局配置。

有关可能选项的列表,请参阅 每包配置

externalDocumentationLinks

无论其使用的源集如何,适用于外部文档链接的全局配置。

有关可能选项的列表,请参阅 外部文档链接配置

pluginsClasspath

包含 Dokka 插件及其依赖项的 JAR 文件列表。

源集配置

如何配置 Kotlin 源集

json
{
  "sourceSets": [
    {
      "displayName": "jvm",
      "sourceSetID": {
        "scopeId": "moduleName",
        "sourceSetName": "main"
      },
      "dependentSourceSets": [
        {
          "scopeId": "dependentSourceSetScopeId",
          "sourceSetName": "dependentSourceSetName"
        }
      ],
      "documentedVisibilities": ["PUBLIC", "PRIVATE", "PROTECTED", "INTERNAL", "PACKAGE"],
      "reportUndocumented": false,
      "skipEmptyPackages": true,
      "skipDeprecated": false,
      "jdkVersion": 8,
      "languageVersion": "1.7",
      "apiVersion": "1.7",
      "noStdlibLink": false,
      "noJdkLink": false,
      "includes": [
        "module.md"
      ],
      "analysisPlatform": "jvm",
      "sourceRoots": [
        "/home/ignat/IdeaProjects/dokka-debug-mvn/src/main/kotlin"
      ],
      "classpath": [
        "libs/kotlin-stdlib-2.1.21.jar",
        "libs/kotlin-stdlib-common-2.1.21.jar"
      ],
      "samples": [
        "samples/basic.kt"
      ],
      "suppressedFiles": [
        "src/main/kotlin/org/jetbrains/dokka/Suppressed.kt"
      ],
      "sourceLinks":  [
        { "_comment": "Options are described in a separate section" }
      ],
      "perPackageOptions": [
        { "_comment": "Options are described in a separate section" }
      ],
      "externalDocumentationLinks":  [
        { "_comment": "Options are described in a separate section" }
      ]
    }
  ]
}
displayName

用于指代此源集的显示名称。

该名称既用于外部(例如,源集名称对文档读者可见),也用于内部(例如,用于 reportUndocumented 的日志消息)。

如果没有更好的替代方案,可以使用平台名称。

sourceSetID

源集的技术 ID

documentedVisibilities

应被文档化的可见性修饰符集合。

如果想文档化 protected/internal/private 声明, 或者想排除 public 声明并只文档化内部 API,都可以使用此选项。

这可以按包进行配置。

可能的值:

  • PUBLIC
  • PRIVATE
  • PROTECTED
  • INTERNAL
  • PACKAGE

默认值:PUBLIC

reportUndocumented

是否发出关于可见的未文档化声明的警告,即经过 documentedVisibilities 和其他过滤器筛选后,没有 KDoc 的声明。

此设置与 failOnWarning 配合良好。

这可以按包进行配置。

默认值:false

skipEmptyPackages

是否跳过在应用各种过滤器后不包含任何可见声明的包。

例如,如果 skipDeprecated 设置为 true,并且您的包只包含已废弃声明,则该包被认为是空的。

CLI 运行器的默认值为 false

skipDeprecated

是否文档化用 @Deprecated 注解的声明。

这可以按包进行配置。

默认值:false

jdkVersion

为 Java 类型生成外部文档链接时使用的 JDK 版本。

例如,如果您在某个公共声明签名中使用 java.util.UUID, 并且此选项设置为 8,Dokka 会为其生成一个指向 JDK 8 Javadoc 的外部文档链接。

languageVersion

Kotlin 语言版本, 用于设置分析和 @sample 环境。

apiVersion

Kotlin API 版本, 用于设置分析和 @sample 环境。

noStdlibLink

是否生成指向 Kotlin 标准库 API 参考文档的外部文档链接。

注意:当 noStdLibLink 设置为 false 时,生成链接。

默认值:false

noJdkLink

是否生成指向 JDK Javadoc 的外部文档链接。

JDK Javadoc 的版本由 jdkVersion 选项决定。

注意:当 noJdkLink 设置为 false 时,生成链接。

默认值:false

includes

包含 模块和包文档的 Markdown 文件列表。

指定文件的内容将被解析并嵌入到文档中作为模块和包的描述。

analysisPlatform

用于设置代码分析和 @sample 环境的平台。

可能的值:

  • jvm
  • common
  • js
  • native
sourceRoots

要分析和文档化的源代码根目录。 可接受的输入是目录和单个 .kt / .java 文件。

classpath

用于分析和交互式示例的类路径。

如果来自依赖项的某些类型未自动解析/识别,此选项很有用。

此选项接受 .jar.klib 文件。

samples

包含示例函数(通过 @sample KDoc 标签引用)的目录或文件列表。

suppressedFiles

生成文档时要抑制的文件。

sourceLinks

一组仅适用于此源集的源码链接参数。

有关可能选项的列表,请参阅 源码链接配置

perPackageOptions

一组特定于此源集内匹配包的参数。

有关可能选项的列表,请参阅 每包配置

externalDocumentationLinks

一组仅适用于此源集的外部文档链接参数。

有关可能选项的列表,请参阅 外部文档链接配置

源码链接配置

sourceLinks 配置块允许您为每个签名添加一个 source 链接,该链接指向具有特定行号的 remoteUrl。(行号可以通过设置 remoteLineSuffix 来配置)。

这有助于读者找到每个声明的源代码。

例如,请参阅 kotlinx.coroutinescount() 函数的文档。

您可以同时为所有源集配置源码链接,或者 单独配置

json
{
  "sourceLinks": [
    {
      "localDirectory": "src/main/kotlin",
      "remoteUrl": "https://github.com/Kotlin/dokka/tree/master/src/main/kotlin",
      "remoteLineSuffix": "#L"
    }
  ]
}
localDirectory

本地源代码目录的路径。

remoteUrl

源代码托管服务的 URL,可供文档读者访问, 如 GitHub、GitLab、Bitbucket 等。此 URL 用于生成 声明的源代码链接。

remoteLineSuffix

用于将源代码行号附加到 URL 的后缀。这有助于读者不仅导航到文件, 还导航到声明的特定行号。

数字本身将附加到指定的后缀。例如, 如果此选项设置为 #L 且行号为 10,则结果 URL 后缀 为 #L10

常用服务使用的后缀:

  • GitHub:#L
  • GitLab:#L
  • Bitbucket:#lines-

默认值:空(无后缀)

每包配置

perPackageOptions 配置块允许为通过 matchingRegex 匹配的特定包设置一些选项。

您可以同时为所有源集添加包配置,或者 单独添加

json
{
  "perPackageOptions": [
    {
      "matchingRegex": ".*internal.*",
      "suppress": false,
      "skipDeprecated": false,
      "reportUndocumented": false,
      "documentedVisibilities": ["PUBLIC", "PRIVATE", "PROTECTED", "INTERNAL", "PACKAGE"]
    }
  ]
}
matchingRegex

用于匹配包的正则表达式。

suppress

生成文档时是否应跳过此包。

默认值:false

skipDeprecated

是否文档化用 @Deprecated 注解的声明。

这可以在项目/模块级别设置。

默认值:false

reportUndocumented

是否发出关于可见的未文档化声明的警告,即经过 documentedVisibilities 和其他过滤器筛选后,没有 KDoc 的声明。

此设置与 failOnWarning 配合良好。

这可以在源集级别配置。

默认值:false

documentedVisibilities

应被文档化的可见性修饰符集合。

如果想文档化此包内的 protected/internal/private 声明, 或者想排除 public 声明并只文档化内部 API,都可以使用此选项。

可以在源集级别配置。

默认值:PUBLIC

外部文档链接配置

externalDocumentationLinks 块允许创建指向您的依赖项的外部托管文档的链接。

例如,如果您正在使用来自 kotlinx.serialization 的类型,默认情况下它们在您的文档中是不可点击的,如同未解析一样。然而,由于 kotlinx.serialization 的 API 参考文档是由 Dokka 构建并 发布在 kotlinlang.org 上的,您可以为其配置外部文档链接。这样,Dokka 就可以为库中的类型生成链接,使它们成功解析并可点击。

您可以同时为所有源集配置外部文档链接,或者 单独配置

json
{
  "externalDocumentationLinks": [
    {
      "url": "https://kotlinlang.org/api/kotlinx.serialization/",
      "packageListUrl": "https://kotlinlang.org/api/kotlinx.serialization/package-list"
    }
  ]
}
url

要链接的文档的根 URL。它必须包含一个尾部斜杠。

Dokka 会尽力自动查找给定 URL 的 package-list, 并将声明链接在一起。

如果自动解析失败,或者您想改用本地缓存的文件, 请考虑设置 packageListUrl 选项。

packageListUrl

package-list 的确切位置。这是替代依赖 Dokka 自动解析它的一种方式。

包列表包含有关文档和项目本身的信息, 例如模块和包名称。

这也可以是本地缓存文件,以避免网络调用。

完整配置

下面您可以看到同时应用了所有可能配置选项的示例。

json
{
  "moduleName": "Dokka Example",
  "moduleVersion": null,
  "outputDir": "./build/dokka/html",
  "failOnWarning": false,
  "suppressObviousFunctions": true,
  "suppressInheritedMembers": false,
  "offlineMode": false,
  "sourceLinks": [
    {
      "localDirectory": "src/main/kotlin",
      "remoteUrl": "https://github.com/Kotlin/dokka/tree/master/src/main/kotlin",
      "remoteLineSuffix": "#L"
    }
  ],
  "externalDocumentationLinks": [
    {
      "url": "https://docs.oracle.com/javase/8/docs/api/",
      "packageListUrl": "https://docs.oracle.com/javase/8/docs/api/package-list"
    },
    {
      "url": "https://kotlinlang.org/api/core/kotlin-stdlib/",
      "packageListUrl": "https://kotlinlang.org/api/core/kotlin-stdlib/package-list"
    }
  ],
  "perPackageOptions": [
    {
      "matchingRegex": ".*internal.*",
      "suppress": false,
      "reportUndocumented": false,
      "skipDeprecated": false,
      "documentedVisibilities": ["PUBLIC", "PRIVATE", "PROTECTED", "INTERNAL", "PACKAGE"]
    }
  ],
  "sourceSets": [
    {
      "displayName": "jvm",
      "sourceSetID": {
        "scopeId": "moduleName",
        "sourceSetName": "main"
      },
      "dependentSourceSets": [
        {
          "scopeId": "dependentSourceSetScopeId",
          "sourceSetName": "dependentSourceSetName"
        }
      ],
      "documentedVisibilities": ["PUBLIC", "PRIVATE", "PROTECTED", "INTERNAL", "PACKAGE"],
      "reportUndocumented": false,
      "skipEmptyPackages": true,
      "skipDeprecated": false,
      "jdkVersion": 8,
      "languageVersion": "1.7",
      "apiVersion": "1.7",
      "noStdlibLink": false,
      "noJdkLink": false,
      "includes": [
        "module.md"
      ],
      "analysisPlatform": "jvm",
      "sourceRoots": [
        "/home/ignat/IdeaProjects/dokka-debug-mvn/src/main/kotlin"
      ],
      "classpath": [
        "libs/kotlin-stdlib-2.1.21.jar",
        "libs/kotlin-stdlib-common-2.1.21.jar"
      ],
      "samples": [
        "samples/basic.kt"
      ],
      "suppressedFiles": [
        "src/main/kotlin/org/jetbrains/dokka/Suppressed.kt"
      ],
      "sourceLinks": [
        {
          "localDirectory": "src/main/kotlin",
          "remoteUrl": "https://github.com/Kotlin/dokka/tree/master/src/main/kotlin",
          "remoteLineSuffix": "#L"
        }
      ],
      "externalDocumentationLinks": [
        {
          "url": "https://docs.oracle.com/javase/8/docs/api/",
          "packageListUrl": "https://docs.oracle.com/javase/8/docs/api/package-list"
        },
        {
          "url": "https://kotlinlang.org/api/core/kotlin-stdlib/",
          "packageListUrl": "https://kotlinlang.org/api/core/kotlin-stdlib/package-list"
        }
      ],
      "perPackageOptions": [
        {
          "matchingRegex": ".*internal.*",
          "suppress": false,
          "reportUndocumented": false,
          "skipDeprecated": false,
          "documentedVisibilities": ["PUBLIC", "PRIVATE", "PROTECTED", "INTERNAL", "PACKAGE"]
        }
      ]
    }
  ],
  "pluginsClasspath": [
    "./dokka-base-2.0.0.jar",
    "./kotlinx-html-jvm-0.8.0.jar",
    "./analysis-kotlin-descriptors-2.0.0.jar",
    "./freemarker-2.3.31.jar"
  ],
  "pluginsConfiguration": [
    {
      "fqPluginName": "org.jetbrains.dokka.base.DokkaBase",
      "serializationFormat": "JSON",
      "values": "{\"separateInheritedMembers\":false,\"footerMessage\":\"© 2021 pretty good Copyright\"}"
    }
  ],
  "includes": [
    "module.md"
  ]
}