Maven
Mavenベースのプロジェクトのドキュメントを生成するには、Dokka用Mavenプラグインを使用します。
Dokka用Gradleプラグインと比較して、Mavenプラグインは基本的な機能しか持たず、 マルチモジュールビルドをサポートしていません。
Mavenの例プロジェクトにアクセスして、Dokkaを試したり、Mavenプロジェクト用に設定する方法を確認できます。
Dokkaの適用
Dokkaを適用するには、POMファイルのplugins
セクションにdokka-maven-plugin
を追加する必要があります。
<build>
<plugins>
<plugin>
<groupId>org.jetbrains.dokka</groupId>
<artifactId>dokka-maven-plugin</artifactId>
<version>2.0.0</version>
<executions>
<execution>
<phase>pre-site</phase>
<goals>
<goal>dokka</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
ドキュメントの生成
Mavenプラグインによって提供されるゴールは以下の通りです。
ゴール | 説明 |
---|---|
dokka:dokka | Dokkaプラグインが適用されたドキュメントを生成します。デフォルトのフォーマットはHTMLです。 |
実験的機能 (Experimental)
ゴール | 説明 |
---|---|
dokka:javadoc | Javadocフォーマットでドキュメントを生成します。 |
dokka:javadocJar | Javadocフォーマットのドキュメントを含むjavadoc.jar ファイルを生成します。 |
その他の出力フォーマット
デフォルトでは、Dokka用MavenプラグインはHTML出力フォーマットでドキュメントをビルドします。
他のすべての出力フォーマットはDokkaプラグインとして実装されています。目的のフォーマットでドキュメントを生成するには、それをDokkaプラグインとして設定に追加する必要があります。
例えば、実験的なGFMフォーマットを使用するには、gfm-plugin
アーティファクトを追加する必要があります。
<plugin>
<groupId>org.jetbrains.dokka</groupId>
<artifactId>dokka-maven-plugin</artifactId>
...
<configuration>
<dokkaPlugins>
<plugin>
<groupId>org.jetbrains.dokka</groupId>
<artifactId>gfm-plugin</artifactId>
<version>2.0.0</version>
</plugin>
</dokkaPlugins>
</configuration>
</plugin>
この設定でdokka:dokka
ゴールを実行すると、GFMフォーマットでドキュメントが生成されます。
Dokkaプラグインについて詳しく知るには、Dokkaプラグインを参照してください。
javadoc.jarのビルド
ライブラリをリポジトリに公開したい場合、ライブラリのAPIリファレンスドキュメントを含むjavadoc.jar
ファイルを提供する必要がある場合があります。
例えば、Maven Centralに公開する場合、プロジェクトと一緒にjavadoc.jar
を提供することが必須です。ただし、すべてのリポジトリにこのルールがあるわけではありません。
Dokka用Gradleプラグインとは異なり、Mavenプラグインにはすぐに使えるdokka:javadocJar
ゴールが付属しています。デフォルトでは、target
フォルダにJavadoc出力フォーマットでドキュメントを生成します。
組み込みのゴールに満足できない場合、または出力をカスタマイズしたい場合(例えば、JavadocではなくHTMLフォーマットでドキュメントを生成したい場合)、以下の設定でMaven JARプラグインを追加することで同様の動作を実現できます。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
<execution>
<id>dokka-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>dokka</classifier>
<classesDirectory>${project.build.directory}/dokka</classesDirectory>
<skipIfEmpty>true</skipIfEmpty>
</configuration>
</execution>
</executions>
</plugin>
ドキュメントとそれに対応する.jar
アーカイブは、dokka:dokka
とjar:jar@dokka-jar
ゴールを実行することで生成されます。
mvn dokka:dokka jar:jar@dokka-jar
Maven Centralにライブラリを公開する場合、javadoc.ioのようなサービスを利用して、 ライブラリのAPIドキュメントを無料で、かつセットアップなしでホストできます。 これは
javadoc.jar
から直接ドキュメントページを取得します。 この例で示されているように、HTMLフォーマットとうまく機能します。
設定例
Mavenのプラグイン設定ブロックはDokkaを設定するために使用できます。
以下は、ドキュメントの出力場所のみを変更する基本的な設定の例です。
<plugin>
<groupId>org.jetbrains.dokka</groupId>
<artifactId>dokka-maven-plugin</artifactId>
...
<configuration>
<outputDir>${project.basedir}/target/documentation/dokka</outputDir>
</configuration>
</plugin>
設定オプション
Dokkaには、あなたと読者のエクスペリエンスを調整するための多くの設定オプションがあります。
以下に、各設定セクションの例と詳細な説明を示します。ページの最下部には、すべての設定オプションが適用された例も記載されています。
一般的な設定
<plugin>
<groupId>org.jetbrains.dokka</groupId>
<artifactId>dokka-maven-plugin</artifactId>
<!-- ... -->
<configuration>
<skip>false</skip>
<moduleName>${project.artifactId}</moduleName>
<outputDir>${project.basedir}/target/documentation</outputDir>
<failOnWarning>false</failOnWarning>
<suppressObviousFunctions>true</suppressObviousFunctions>
<suppressInheritedMembers>false</suppressInheritedMembers>
<offlineMode>false</offlineMode>
<sourceDirectories>
<dir>${project.basedir}/src</dir>
</sourceDirectories>
<documentedVisibilities>
<visibility>PUBLIC</visibility>
<visibility>PROTECTED</visibility>
</documentedVisibilities>
<reportUndocumented>false</reportUndocumented>
<skipDeprecated>false</skipDeprecated>
<skipEmptyPackages>true</skipEmptyPackages>
<suppressedFiles>
<file>/path/to/dir</file>
<file>/path/to/file</file>
</suppressedFiles>
<jdkVersion>8</jdkVersion>
<languageVersion>1.7</languageVersion>
<apiVersion>1.7</apiVersion>
<noStdlibLink>false</noStdlibLink>
<noJdkLink>false</noJdkLink>
<includes>
<include>packages.md</include>
<include>extra.md</include>
</includes>
<classpath>${project.compileClasspathElements}</classpath>
<samples>
<dir>${project.basedir}/samples</dir>
</samples>
<sourceLinks>
<!-- Separate section -->
</sourceLinks>
<externalDocumentationLinks>
<!-- Separate section -->
</externalDocumentationLinks>
<perPackageOptions>
<!-- Separate section -->
</perPackageOptions>
</configuration>
</plugin>
skip
ドキュメントの生成をスキップするかどうか。
デフォルト: false
moduleName
プロジェクト/モジュールを参照するために使用される表示名。目次、ナビゲーション、ログなどに使用されます。
デフォルト: {project.artifactId}
outputDir
フォーマットに関わらず、ドキュメントが生成されるディレクトリ。
デフォルト: {project.basedir}/target/dokka
failOnWarning
Dokkaが警告またはエラーを出力した場合に、ドキュメントの生成を失敗させるかどうか。 プロセスは、すべてのエラーと警告が出力されるまで待機します。
この設定はreportUndocumented
と組み合わせるとうまく機能します。
デフォルト: false
suppressObviousFunctions
自明な関数を抑制するかどうか。
以下の関数は自明であるとみなされます。
equals
、hashCode
、toString
のように、kotlin.Any
、Kotlin.Enum
、java.lang.Object
、 またはjava.lang.Enum
から継承された関数。dataClass.componentN
やdataClass.copy
のように、 コンパイラによって生成され(合成された)、ドキュメントがない関数。
デフォルト: true
suppressInheritedMembers
特定のクラスで明示的にオーバーライドされていない継承メンバーを抑制するかどうか。
注意: これによりequals
/hashCode
/toString
のような関数を抑制できますが、 dataClass.componentN
やdataClass.copy
のような合成関数は抑制できません。 それにはsuppressObviousFunctions
を使用してください。
デフォルト: false
offlineMode
ネットワーク経由でリモートファイル/リンクを解決するかどうか。
これには、外部ドキュメントリンク生成に使用されるパッケージリストが含まれます。 例えば、標準ライブラリのクラスをクリック可能にするためなどです。
これをtrue
に設定すると、特定のケースではビルド時間を大幅に短縮できますが、 ドキュメントの品質やユーザーエクスペリエンスを低下させる可能性もあります。例えば、 標準ライブラリを含む依存関係からのクラス/メンバーリンクを解決しないことなどです。
注意: フェッチしたファイルをローカルにキャッシュし、それらをローカルパスとしてDokkaに提供できます。 externalDocumentationLinks
セクションを参照してください。
デフォルト: false
sourceDirectories
分析およびドキュメント化されるソースコードルート。 受け入れられる入力は、ディレクトリおよび個々の.kt
/ .java
ファイルです。
デフォルト: {project.compileSourceRoots}
documentedVisibilities
ドキュメント化すべき可視性修飾子のセット。
これは、protected
/internal
/private
宣言をドキュメント化したい場合や、 public
宣言を除外して内部APIのみをドキュメント化したい場合に使用できます。
パッケージごとに設定可能です。
デフォルト: PUBLIC
reportUndocumented
documentedVisibilities
やその他のフィルターによってフィルターされた後、 表示可能なドキュメント化されていない宣言(KDocsがない宣言)について警告を発するかどうか。
この設定はfailOnWarning
と組み合わせるとうまく機能します。
これはパッケージレベルで上書きできます。
デフォルト: false
skipDeprecated
@Deprecated
で注釈付けされた宣言をドキュメント化するかどうか。
これはパッケージレベルで上書きできます。
デフォルト: false
skipEmptyPackages
様々なフィルターが適用された後、表示可能な宣言を含まないパッケージをスキップするかどうか。
例えば、skipDeprecated
がtrue
に設定されており、 パッケージに非推奨の宣言のみが含まれている場合、そのパッケージは空であるとみなされます。
デフォルト: true
suppressedFiles
抑制すべきディレクトリまたは個々のファイル。つまり、そこからの宣言はドキュメント化されません。
jdkVersion
Java型用の外部ドキュメントリンクを生成する際に使用するJDKバージョン。
例えば、何らかのpublic宣言のシグネチャでjava.util.UUID
を使用しており、 このオプションが8
に設定されている場合、Dokkaはそれに対する JDK 8 Javadocへの外部ドキュメントリンクを生成します。
デフォルト: JDK 8
languageVersion
分析および@sample 環境を設定するために使用されるKotlin言語バージョン。
デフォルトでは、Dokkaに組み込まれているコンパイラで利用可能な最新の言語バージョンが使用されます。
apiVersion
分析および@sample 環境を設定するために使用されるKotlin APIバージョン。
デフォルトでは、languageVersion
から推測されます。
noStdlibLink
Kotlinの標準ライブラリのAPIリファレンスドキュメントに繋がる外部ドキュメントリンクを生成するかどうか。
注意: noStdLibLink
がfalse
に設定されている場合、リンクは生成されます。
デフォルト: false
noJdkLink
JDKのJavadocへの外部ドキュメントリンクを生成するかどうか。
JDK JavadocのバージョンはjdkVersion
オプションによって決定されます。
注意: noJdkLink
がfalse
に設定されている場合、リンクは生成されます。
デフォルト: false
includes
モジュールおよびパッケージのドキュメントを 含むMarkdownファイルの一覧。
指定されたファイルの内容は解析され、モジュールおよびパッケージの説明としてドキュメントに埋め込まれます。
classpath
分析およびインタラクティブなサンプル用のクラスパス。
これは、依存関係から来るいくつかの型が自動的に解決/認識されない場合に役立ちます。 このオプションは、.jar
および.klib
ファイルの両方を受け入れます。
デフォルト: {project.compileClasspathElements}
samples
@sample KDocタグを介して参照される サンプル関数を含むディレクトリまたはファイルの一覧。
ソースリンクの設定
sourceLinks
設定ブロックを使用すると、各シグネチャに特定の行番号を含むurl
へのsource
リンクを追加できます。(行番号はlineSuffix
を設定することで構成可能です。)
これにより、読者は各宣言のソースコードを見つけることができます。
例として、kotlinx.coroutines
のcount()
関数のドキュメントを参照してください。
<plugin>
<groupId>org.jetbrains.dokka</groupId>
<artifactId>dokka-maven-plugin</artifactId>
<!-- ... -->
<configuration>
<sourceLinks>
<link>
<path>src</path>
<url>https://github.com/kotlin/dokka/tree/master/src</url>
<lineSuffix>#L</lineSuffix>
</link>
</sourceLinks>
</configuration>
</plugin>
path
ローカルのソースディレクトリへのパス。パスは現在のモジュールのルートからの相対パスでなければなりません。
注意: Unixベースのパスのみが許可されており、Windows形式のパスはエラーをスローします。
url
GitHub、GitLab、Bitbucketなど、ドキュメント読者がアクセスできるソースコードホスティングサービスのURL。 このURLは宣言のソースコードリンクを生成するために使用されます。
lineSuffix
ソースコードの行番号をURLに追加するために使用されるサフィックス。 これにより、読者はファイルだけでなく、宣言の特定の行番号にもナビゲートできます。
番号自体は指定されたサフィックスに追加されます。例えば、このオプションが#L
に設定され、 行番号が10の場合、結果のURLサフィックスは#L10
になります。
一般的なサービスで使用されるサフィックス:
- GitHub:
#L
- GitLab:
#L
- Bitbucket:
#lines-
外部ドキュメントリンクの設定
externalDocumentationLinks
ブロックを使用すると、依存関係の外部ホストされているドキュメントに繋がるリンクを作成できます。
例えば、kotlinx.serialization
の型を使用している場合、デフォルトではそれらはドキュメントでクリックできない、あたかも未解決であるかのように表示されます。しかし、kotlinx.serialization
のAPIリファレンスドキュメントはDokkaによってビルドされ、kotlinlang.orgに公開されているため、それに対する外部ドキュメントリンクを設定できます。これによりDokkaがライブラリの型へのリンクを生成できるようになり、それらが正常に解決され、クリック可能になります。
デフォルトでは、Kotlin標準ライブラリおよびJDK用の外部ドキュメントリンクが設定されています。
<plugin>
<groupId>org.jetbrains.dokka</groupId>
<artifactId>dokka-maven-plugin</artifactId>
<!-- ... -->
<configuration>
<externalDocumentationLinks>
<link>
<url>https://kotlinlang.org/api/kotlinx.serialization/</url>
<packageListUrl>file:/${project.basedir}/serialization.package.list</packageListUrl>
</link>
</externalDocumentationLinks>
</configuration>
</plugin>
url
リンク先のドキュメントのルートURL。末尾のスラッシュを含める必要があります。
Dokkaは、与えられたURLのpackage-list
を自動的に見つけ出し、 宣言を相互にリンクするために最善を尽くします。
自動解決が失敗した場合、または代わりにローカルキャッシュファイルを使用したい場合は、 packageListUrl
オプションの設定を検討してください。
packageListUrl
package-list
の正確な場所。これはDokkaが自動的に解決することに依存する代替手段です。
パッケージリストには、モジュール名やパッケージ名など、ドキュメントおよびプロジェクト自体に関する情報が含まれています。
これはネットワーク呼び出しを避けるために、ローカルにキャッシュされたファイルでも構いません。
パッケージオプション
perPackageOptions
設定ブロックを使用すると、matchingRegex
でマッチする特定のパッケージにいくつかのオプションを設定できます。
<plugin>
<groupId>org.jetbrains.dokka</groupId>
<artifactId>dokka-maven-plugin</artifactId>
<!-- ... -->
<configuration>
<perPackageOptions>
<packageOptions>
<matchingRegex>.*api.*</matchingRegex>
<suppress>false</suppress>
<reportUndocumented>false</reportUndocumented>
<skipDeprecated>false</skipDeprecated>
<documentedVisibilities>
<visibility>PUBLIC</visibility>
<visibility>PRIVATE</visibility>
<visibility>PROTECTED</visibility>
<visibility>INTERNAL</visibility>
<visibility>PACKAGE</visibility>
</documentedVisibilities>
</packageOptions>
</perPackageOptions>
</configuration>
</plugin>
matchingRegex
パッケージを照合するために使用される正規表現。
デフォルト: .*
suppress
このパッケージをドキュメント生成時にスキップすべきかどうか。
デフォルト: false
documentedVisibilities
ドキュメント化すべき可視性修飾子のセット。
これは、このパッケージ内のprotected
/internal
/private
宣言をドキュメント化したい場合や、 public
宣言を除外して内部APIのみをドキュメント化したい場合に使用できます。
デフォルト: PUBLIC
skipDeprecated
@Deprecated
で注釈付けされた宣言をドキュメント化するかどうか。
これはプロジェクト/モジュールレベルで設定できます。
デフォルト: false
reportUndocumented
documentedVisibilities
やその他のフィルターによってフィルターされた後、 表示可能なドキュメント化されていない宣言(KDocsがない宣言)について警告を発するかどうか。
この設定はfailOnWarning
と組み合わせるとうまく機能します。
デフォルト: false
完全な設定
以下に、適用可能なすべての設定オプションを同時に示した例を示します。
<plugin>
<groupId>org.jetbrains.dokka</groupId>
<artifactId>dokka-maven-plugin</artifactId>
<!-- ... -->
<configuration>
<skip>false</skip>
<moduleName>${project.artifactId}</moduleName>
<outputDir>${project.basedir}/target/documentation</outputDir>
<failOnWarning>false</failOnWarning>
<suppressObviousFunctions>true</suppressObviousFunctions>
<suppressInheritedMembers>false</suppressInheritedMembers>
<offlineMode>false</offlineMode>
<sourceDirectories>
<dir>${project.basedir}/src</dir>
</sourceDirectories>
<documentedVisibilities>
<visibility>PUBLIC</visibility>
<visibility>PRIVATE</visibility>
<visibility>PROTECTED</visibility>
<visibility>INTERNAL</visibility>
<visibility>PACKAGE</visibility>
</documentedVisibilities>
<reportUndocumented>false</reportUndocumented>
<skipDeprecated>false</skipDeprecated>
<skipEmptyPackages>true</skipEmptyPackages>
<suppressedFiles>
<file>/path/to/dir</file>
<file>/path/to/file</file>
</suppressedFiles>
<jdkVersion>8</jdkVersion>
<languageVersion>1.7</languageVersion>
<apiVersion>1.7</apiVersion>
<noStdlibLink>false</noStdlibLink>
<noJdkLink>false</noJdkLink>
<includes>
<include>packages.md</include>
<include>extra.md</include>
</includes>
<classpath>${project.compileClasspathElements}</classpath>
<samples>
<dir>${project.basedir}/samples</dir>
</samples>
<sourceLinks>
<link>
<path>src</path>
<url>https://github.com/kotlin/dokka/tree/master/src</url>
<lineSuffix>#L</lineSuffix>
</link>
</sourceLinks>
<externalDocumentationLinks>
<link>
<url>https://kotlinlang.org/api/core/kotlin-stdlib/</url>
<packageListUrl>file:/${project.basedir}/stdlib.package.list</packageListUrl>
</link>
</externalDocumentationLinks>
<perPackageOptions>
<packageOptions>
<matchingRegex>.*api.*</matchingRegex>
<suppress>false</suppress>
<reportUndocumented>false</reportUndocumented>
<skipDeprecated>false</skipDeprecated>
<documentedVisibilities>
<visibility>PUBLIC</visibility>
<visibility>PRIVATE</visibility>
<visibility>PROTECTED</visibility>
<visibility>INTERNAL</visibility>
<visibility>PACKAGE</visibility>
</documentedVisibilities>
</packageOptions>
</perPackageOptions>
</configuration>
</plugin>