Skip to content

CLI

如果出于某种原因你无法使用 GradleMaven 构建工具,Dokka 提供了一个用于生成文档的命令行 (CLI) 运行器。

相比之下,它具有与 Dokka 的 Gradle 插件相同(甚至更多)的功能。虽然由于没有自动配置,它的设置要困难得多,特别是在多平台和多模块环境中。

开始使用

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

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

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

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

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

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

生成文档

前提条件

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

下面列出了任何输出格式所需的依赖项:

组 (Group)构件 (Artifact)版本链接
org.jetbrains.dokkadokka-base2.1.0下载
org.jetbrains.dokkaanalysis-kotlin-descriptors2.1.0下载

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

组 (Group)构件 (Artifact)版本链接
org.jetbrains.kotlinxkotlinx-html-jvm0.8.0下载
org.freemarkerfreemarker2.3.31下载

使用命令行选项运行

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

你至少需要提供以下选项:

  • -pluginsClasspath - 以分号 ; 分隔的已下载依赖项的绝对/相对路径列表
  • -sourceSet - 要为其生成文档的源代码的绝对路径
  • -outputDir - 文档输出目录的绝对/相对路径
Bash
java -jar dokka-cli-2.1.0.jar \
     -pluginsClasspath "./dokka-base-2.1.0.jar;./analysis-kotlin-descriptors-2.1.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.1.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.1.0.jar",
    "./kotlinx-html-jvm-0.8.0.jar",
    "./analysis-kotlin-descriptors-2.1.0.jar",
    "./freemarker-2.3.31.jar"
  ]
}

有关更多详细信息,请参阅 JSON 配置选项

其他输出格式

默认情况下,dokka-base 构件仅包含 HTML 输出格式。

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

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

通过命令行选项:

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

通过 JSON 配置:

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

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

有关更多信息,请参阅 GFMJavadoc 页面。

命令行选项

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

Bash
java -jar dokka-cli-2.1.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.1.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要抑制的文件路径。接受由分号分隔的多个路径。
suppressAnnotatedWith用于抑制带有指定注解声明的注解完全限定名 (FQNs)。接受由分号分隔的多个值。
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": "选项在单独的章节中说明" }
  ],
  "perPackageOptions": [
    { "_comment": "选项在单独的章节中说明" }
  ],
  "externalDocumentationLinks":  [
    { "_comment": "选项在单独的章节中说明" }
  ],
  "sourceSets": [
    { "_comment": "选项在单独的章节中说明" }
  ],
  "pluginsClasspath": [
    "./dokka-base-2.1.0.jar",
    "./kotlinx-html-jvm-0.8.0.jar",
    "./analysis-kotlin-descriptors-2.1.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-list。 例如,使标准库中的类可以点击。

在某些情况下,将此项设置为 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.3.0.jar",
        "libs/kotlin-stdlib-common-2.3.0.jar"
      ],
      "samples": [
        "samples/basic.kt"
      ],
      "suppressedFiles": [
        "src/main/kotlin/org/jetbrains/dokka/Suppressed.kt"
      ],
      "sourceLinks":  [
        { "_comment": "选项在单独的章节中说明" }
      ],
      "perPackageOptions": [
        { "_comment": "选项在单独的章节中说明" }
      ],
      "externalDocumentationLinks":  [
        { "_comment": "选项在单独的章节中说明" }
      ]
    }
  ]
}
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

用于设置分析和 @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

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

suppressAnnotatedWith

用于抑制带有指定注解声明的注解完全限定名 (FQNs) 列表。

任何带有这些注解之一的声明都将从生成的文档中排除。

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,
  "suppressAnnotatedWith": [
    "com.example.SuppressMe"
  ],
  "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.3.0.jar",
        "libs/kotlin-stdlib-common-2.3.0.jar"
      ],
      "samples": [
        "samples/basic.kt"
      ],
      "suppressedFiles": [
        "src/main/kotlin/org/jetbrains/dokka/Suppressed.kt"
      ],
      "suppressAnnotatedWith": [
        "com.example.SuppressMe"
      ],
      "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.1.0.jar",
    "./kotlinx-html-jvm-0.8.0.jar",
    "./analysis-kotlin-descriptors-2.1.0.jar",
    "./freemarker-2.3.31.jar"
  ],
  "pluginsConfiguration": [
    {
      "fqPluginName": "org.jetbrains.dokka.base.DokkaBase",
      "serializationFormat": "JSON",
      "values": "{\"separateInheritedMembers\":false,\"footerMessage\":\"© 2021 相当不错的版权信息\"}"
    }
  ],
  "includes": [
    "module.md"
  ]
}