Maven
Mavenベースのプロジェクトのドキュメントを生成するには、DokkaのMavenプラグインを使用できます。
NOTE
DokkaのGradleプラグインと比較して、Mavenプラグインは基本的な機能のみを持ち、マルチモジュールビルドのサポートは提供しません。
Dokkaを試してMavenプロジェクト向けにどのように設定できるかを確認するには、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形式です。 |
実験的機能
ゴール | 説明 |
---|---|
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
TIP
ライブラリを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>
kotlin.Any
、Kotlin.Enum
、java.lang.Object
またはjava.lang.Enum
から継承されたもの(例:equals
、hashCode
、toString
)。- 合成されたもの(コンパイラによって生成されたもの)で、ドキュメントがないもの(例:
dataClass.componentN
またはdataClass.copy
)。
skip
ドキュメント生成をスキップするかどうか。
デフォルト: false
moduleName
プロジェクト/モジュールを参照するために使用される表示名です。目次、ナビゲーション、ロギングなどに使用されます。
デフォルト: {project.artifactId}
outputDir
フォーマットに関係なく、ドキュメントが生成されるディレクトリです。
デフォルト: {project.basedir}/target/dokka
failOnWarning
Dokkaが警告またはエラーを発した場合に、ドキュメント生成を失敗させるかどうか。プロセスは、すべてのエラーと警告が最初に出力されるまで待機します。
この設定はreportUndocumented
と組み合わせてうまく機能します。
デフォルト: false
suppressObviousFunctions
明らかな関数を抑制するかどうか。
関数は次の場合に明らかと見なされます。
デフォルト: 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バージョン。
例えば、ある公開宣言のシグネチャでjava.util.UUID
を使用し、 このオプションが8
に設定されている場合、Dokkaはそれに対する JDK 8 Javadocsへの外部ドキュメントリンクを生成します。
デフォルト: JDK 8
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>
- GitHub:
#L
- GitLab:
#L
- Bitbucket:
#lines-
path
ローカルソースディレクトリへのパス。パスは現在のモジュールのルートからの相対パスである必要があります。
注意: Unixベースのパスのみが許可されており、Windowsスタイルのパスはエラーをスローします。
url
ドキュメント読者がアクセスできるソースコードホスティングサービス(GitHub、GitLab、Bitbucketなど)のURL。 このURLは、宣言のソースコードリンクを生成するために使用されます。
lineSuffix
ソースコードの行番号をURLに追加するために使用されるサフィックス。 これは読者がファイルだけでなく、宣言の特定の行番号にも移動するのに役立ちます。
番号自体は指定されたサフィックスに追加されます。例えば、このオプションが #L
に設定され、行番号が10の場合、結果のURLサフィックスは#L10
になります。
一般的なサービスで使用されるサフィックス:
外部ドキュメントリンク設定
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>