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 插件。要使用它们,您必须将它们放入插件 classpath 中。

例如,如果您想以实验性的 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日志级别,可能的值:DEBUGPROGRESSINFOWARNERROR
help, h使用信息。

源代码集选项

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

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

简要概括:

选项描述
sourceSetName源代码集的名称。
displayName源代码集的显示名称,内部和外部均使用。
classpath用于分析和交互式示例的 Classpath。接受以分号分隔的多个路径。
src要分析和文档化的源代码根目录。接受以分号分隔的多个路径。
dependentSourceSets依赖源代码集的名称,格式为 moduleName/sourceSetName。接受以分号分隔的多个值。
samples包含示例函数的目录或文件列表。接受以分号分隔的多个路径。
includes包含 模块和包文档 的 Markdown 文件。接受以分号分隔的多个路径。
documentedVisibilities要文档化的可见性。接受以分号分隔的多个值。可能的值:PUBLICPRIVATEPROTECTEDINTERNALPACKAGE
reportUndocumented是否报告未文档化的声明。
noSkipEmptyPackages是否为不含任何内容的包创建页面。
skipDeprecated是否跳过已弃用的声明。
jdkVersion用于链接到 JDK Javadoc 的 JDK 版本。
languageVersion用于设置分析和示例的语言版本。
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

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

这包括用于生成外部文档链接的包列表。 例如,使标准库中的类可点击。

将其设置为 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.2.21.jar",
        "libs/kotlin-stdlib-common-2.2.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 声明, 以及在只想文档化内部 API 时排除 public 声明。

这可以按包进行配置。

可能的值:

  • 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

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

apiVersion

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

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

用于分析和交互式示例的 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 声明, 以及在只想文档化内部 API 时排除 public 声明。

可以在源代码集级别配置。

默认值: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.2.21.jar",
        "libs/kotlin-stdlib-common-2.2.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"
  ]
}