CLI
如果由于某些原因您无法使用 Gradle 或 Maven 构建工具,Dokka 提供了命令行 (CLI) 运行器来生成文档。
相比之下,它拥有与 Dokka 的 Gradle 插件相同(甚至更多)的功能。尽管设置起来要困难得多,因为没有自动配置,尤其是在多平台和多模块环境中。
开始使用
CLI 运行器作为一个独立的可运行 Artifact 发布到 Maven Central。
您可以在 Maven Central 上找到它,或者 直接下载。
将 dokka-cli-2.0.0.jar
文件保存到您的计算机后,使用 -help
选项运行它以查看所有可用的配置选项及其描述:
java -jar dokka-cli-2.0.0.jar -help
它也适用于一些嵌套选项,例如 -sourceSet
:
java -jar dokka-cli-2.0.0.jar -sourceSet -help
生成文档
前提条件
由于没有构建工具来管理依赖项,您必须自己提供依赖项的 .jar
文件。
以下是您为任何输出格式所需的依赖项:
组 | Artifact | 版本 | 链接 |
---|---|---|---|
org.jetbrains.dokka | dokka-base | 2.0.0 | 下载 |
org.jetbrains.dokka | analysis-kotlin-descriptors | 2.0.0 | 下载 |
以下是 HTML 输出格式所需的额外依赖项:
组 | Artifact | 版本 | 链接 |
---|---|---|---|
org.jetbrains.kotlinx | kotlinx-html-jvm | 0.8.0 | 下载 |
org.freemarker | freemarker | 2.3.31 | 下载 |
使用命令行选项运行
您可以传递命令行选项来配置 CLI 运行器。
至少需要提供以下选项:
-pluginsClasspath
- 下载的依赖项的绝对/相对路径列表,用分号;
分隔-sourceSet
- 要生成文档的源代码的绝对路径-outputDir
- 文档输出目录的绝对/相对路径
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 配置文件作为第一个也是唯一的参数提供绝对/相对路径。所有其他配置选项都将从中解析。
java -jar dokka-cli-2.0.0.jar dokka-configuration.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
配置选项中。
通过命令行选项:
java -jar dokka-cli-2.0.0.jar \
-pluginsClasspath "./dokka-base-2.0.0.jar;...;./gfm-plugin-2.0.0.jar" \
...
通过 JSON 配置:
{
...
"pluginsClasspath": [
"./dokka-base-2.0.0.jar",
"...",
"./gfm-plugin-2.0.0.jar"
],
...
}
将 GFM 插件传递到 pluginsClasspath
后,CLI 运行器将以 GFM 输出格式生成文档。
更多信息,请参阅 Markdown 和 Javadoc 页面。
命令行选项
要查看所有可能的命令行选项及其详细描述,请运行:
java -jar dokka-cli-2.0.0.jar -help
简要概述:
选项 | 描述 |
---|---|
moduleName | 项目/模块的名称。 |
moduleVersion | 文档化版本。 |
outputDir | 输出目录路径,默认为 ./dokka 。 |
sourceSet | Dokka 源集的配置。包含嵌套配置选项。 |
pluginsConfiguration | Dokka 插件的配置。 |
pluginsClasspath | 包含 Dokka 插件及其依赖项的 JAR 列表。接受用分号分隔的多个路径。 |
offlineMode | 是否通过网络解析远程文件/链接。 |
failOnWarning | 如果 Dokka 发出警告或错误,是否使文档生成失败。 |
delayTemplateSubstitution | 是否延迟某些元素的替换。用于多模块项目的增量构建。 |
noSuppressObviousFunctions | 是否抑制从 kotlin.Any 和 java.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
配置的命令行选项列表,请运行:
java -jar dokka-cli-2.0.0.jar -sourceSet -help
简要概述:
选项 | 描述 |
---|---|
sourceSetName | 源集的名称。 |
displayName | 源集的显示名称,内部和外部都使用。 |
classpath | 用于分析和交互式示例的类路径。接受用分号分隔的多个路径。 |
src | 要分析和文档化的源代码根目录。接受用分号分隔的多个路径。 |
dependentSourceSets | 依赖源集的名称,格式为 moduleName/sourceSetName 。接受用分号分隔的多个值。 |
samples | 包含示例函数的目录或文件列表。接受用分号分隔的多个路径。 |
includes | 包含 模块和包文档 的 Markdown 文件。接受用分号分隔的多个路径。 |
documentedVisibilities | 应被文档化的可见性。接受用分号分隔的多个值。可能的值:PUBLIC 、PRIVATE 、PROTECTED 、INTERNAL 、PACKAGE 。 |
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 配置
以下是每个配置部分的一些示例和详细描述。您还可以在页面底部找到应用了 所有配置选项 的示例。
通用配置
{
"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"
]
}
- 继承自
kotlin.Any
、Kotlin.Enum
、java.lang.Object
或java.lang.Enum
,例如equals
、hashCode
、toString
。 - 合成(由编译器生成)且没有任何文档,例如
dataClass.componentN
或dataClass.copy
。
moduleName
用于指代模块的显示名称。它用于目录、导航、日志等。
默认值:root
moduleVersion
模块版本。
默认值:空
outputDirectory
生成文档的目录,无论输出格式如何。
默认值:./dokka
failOnWarning
如果 Dokka 发出警告或错误,是否使文档生成失败。 进程会先等待所有错误和警告发出。
此设置与 reportUndocumented
配合良好
默认值:false
suppressObviousFunctions
是否抑制明显函数。
如果函数符合以下条件,则被视为明显函数:默认值:true
suppressInheritedMembers
是否抑制给定类中未显式重写的继承成员。
注意:这可以抑制诸如 equals
/ hashCode
/ toString
之类的函数, 但无法抑制诸如 dataClass.componentN
和 dataClass.copy
之类的合成函数。请使用 suppressObviousFunctions
来处理。
默认值:false
offlineMode
是否通过您的网络解析远程文件/链接。
这包括用于生成外部文档链接的 package-lists。 例如,为了使标准库中的类可点击。
将此设置为 true
在某些情况下可以显著加快构建时间, 但也可能降低文档质量和用户体验。例如,通过 不解析来自您的依赖项(包括标准库)的类/成员链接。
注意:您可以在本地缓存获取的文件,并将其作为本地路径提供给 Dokka。请参阅 externalDocumentationLinks
部分。
默认值:false
includes
sourceLinks
适用于所有源集的源码链接的全局配置。
有关可能选项的列表,请参阅 源码链接配置。
perPackageOptions
无论包所在的源集如何,适用于匹配包的全局配置。
有关可能选项的列表,请参阅 每包配置。
externalDocumentationLinks
无论其使用的源集如何,适用于外部文档链接的全局配置。
有关可能选项的列表,请参阅 外部文档链接配置。
pluginsClasspath
包含 Dokka 插件及其依赖项的 JAR 文件列表。
源集配置
如何配置 Kotlin 源集:
{
"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" }
]
}
]
}
PUBLIC
PRIVATE
PROTECTED
INTERNAL
PACKAGE
displayName
用于指代此源集的显示名称。
该名称既用于外部(例如,源集名称对文档读者可见),也用于内部(例如,用于 reportUndocumented
的日志消息)。
如果没有更好的替代方案,可以使用平台名称。
sourceSetID
源集的技术 ID
documentedVisibilities
应被文档化的可见性修饰符集合。
如果想文档化 protected
/internal
/private
声明, 或者想排除 public
声明并只文档化内部 API,都可以使用此选项。
这可以按包进行配置。
可能的值:
默认值: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
sourceRoots
要分析和文档化的源代码根目录。 可接受的输入是目录和单个 .kt
/ .java
文件。
classpath
用于分析和交互式示例的类路径。
如果来自依赖项的某些类型未自动解析/识别,此选项很有用。
此选项接受 .jar
和 .klib
文件。
samples
包含示例函数(通过 @sample KDoc 标签引用)的目录或文件列表。
suppressedFiles
生成文档时要抑制的文件。
sourceLinks
一组仅适用于此源集的源码链接参数。
有关可能选项的列表,请参阅 源码链接配置。
perPackageOptions
一组特定于此源集内匹配包的参数。
有关可能选项的列表,请参阅 每包配置。
externalDocumentationLinks
一组仅适用于此源集的外部文档链接参数。
有关可能选项的列表,请参阅 外部文档链接配置。
源码链接配置
sourceLinks
配置块允许您为每个签名添加一个 source
链接,该链接指向具有特定行号的 remoteUrl
。(行号可以通过设置 remoteLineSuffix
来配置)。
这有助于读者找到每个声明的源代码。
例如,请参阅 kotlinx.coroutines
中 count()
函数的文档。
您可以同时为所有源集配置源码链接,或者 单独配置:
{
"sourceLinks": [
{
"localDirectory": "src/main/kotlin",
"remoteUrl": "https://github.com/Kotlin/dokka/tree/master/src/main/kotlin",
"remoteLineSuffix": "#L"
}
]
}
- GitHub:
#L
- GitLab:
#L
- Bitbucket:
#lines-
localDirectory
本地源代码目录的路径。
remoteUrl
源代码托管服务的 URL,可供文档读者访问, 如 GitHub、GitLab、Bitbucket 等。此 URL 用于生成 声明的源代码链接。
remoteLineSuffix
用于将源代码行号附加到 URL 的后缀。这有助于读者不仅导航到文件, 还导航到声明的特定行号。
数字本身将附加到指定的后缀。例如, 如果此选项设置为 #L
且行号为 10,则结果 URL 后缀 为 #L10
。
常用服务使用的后缀:
默认值:空(无后缀)
每包配置
perPackageOptions
配置块允许为通过 matchingRegex
匹配的特定包设置一些选项。
您可以同时为所有源集添加包配置,或者 单独添加:
{
"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 就可以为库中的类型生成链接,使它们成功解析并可点击。
您可以同时为所有源集配置外部文档链接,或者 单独配置:
{
"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 自动解析它的一种方式。
包列表包含有关文档和项目本身的信息, 例如模块和包名称。
这也可以是本地缓存文件,以避免网络调用。
完整配置
下面您可以看到同时应用了所有可能配置选项的示例。
{
"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"
]
}