ドキュメント生成ツールのDokkaを入れようと思って、手順を調べると簡単だね?と思ってやったけど、めちゃくちゃハマりました・・・
結論
Spring Bootが古いせいでうまくいってないっぽいです。(未検証) なのでSpringBootのバージョンをあげる方が良いですが、とりあえず最小限でやりたいみたいな人の役に立ててればと思います。
環境
- Spring Boot:2.2
- Kotlin:1.4
- Gradle:6.0.1
- Dokka:1.4.10.2 (本当は1.7系を入れようとしたけど一旦古いものでやりました。)
手順
以下を参考にしています。
https://github.com/Kotlin/dokka
1.build.gradle.ktsに追加
以下を追加するだけ!(ですが実行時に失敗します・・・)
plugins {
// 1.7.0を入れたかったけど、依存関係でエラーが出るので今回は1.4.10.2でやりました・・・
id("org.jetbrains.dokka") version "1.4.10.2"
}
repositories {
mavenCentral()
}
dependencies {
dokkaHtmlPlugin("org.jetbrains.dokka:kotlin-as-java-plugin:1.4.10.2")
}
2.実行
./gradlew dokkaHtml
3.結果確認
Could not find org.jetbrains.kotlinx:kotlinx-html-jvm:0.7.2.
が見つからないと怒られる。
> Task :dokkaHtml FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':dokkaHtml'.
> Could not resolve all files for configuration ':dokkaHtmlPlugin'.
> Could not find org.jetbrains.kotlinx:kotlinx-html-jvm:0.7.2.
Required by:
project : > org.jetbrains.dokka:kotlin-as-java-plugin:1.4.10.2 > org.jetbrains.dokka:dokka-base:1.4.10.2
* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':dokkaHtml'.
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:38)
at
・
・
・
org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
... 23 more
Caused by: org.gradle.internal.resolve.ModuleVersionNotFoundException: Could not find org.jetbrains.kotlinx:kotlinx-html-jvm:0.7.2.
Required by:
project : > org.jetbrains.dokka:kotlin-as-java-plugin:1.4.10.2 > org.jetbrains.dokka:dokka-base:1.4.10.2
* Get more help at https://help.gradle.org
BUILD FAILED in 22s
1 actionable task: 1 executed
調べてみると・・
https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-html-jvm?repo=kotlinx
mavenCentral
にはなくて kotlinX
リポジトリにのみ存在するライブラリであることがわかりました・・・
そして以下に記載のkotlinXリポジトリを追加しようかなと思ったけど、そもそも https://dl.bintray.com/kotlin/kotlinx/
は502のBad Gatewayに・・・
https://mvnrepository.com/repos/kotlinx
(調べてみると閉鎖されていて、基本的にはCentralからだけにとるようにしようみたいなのもあった
https://www.reddit.com/r/Kotlin/comments/r5ul4k/kotlin_bintray_bad_gateway/)
以下で kotlinx-html-jvm:0.7.2
をダウンロードできることを発見
repositories {
mavenCentral()
// 以下を追加
maven("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven")
}
再度実行
./gradlew dokkaHtml
結果
無事成功! ./build/dokka/html
の下にファイルができます。
> Task :dokkaHtml
Dokka 1.4.* is an alpha project
Initializing plugins
Validity check
Creating documentation models
Transforming documentation model before merging
Merging documentation models
Transforming documentation model after merging
Creating pages
Transforming pages
Rendering
BUILD SUCCESSFUL in 50s
1 actionable task: 1 executed
おまけ
バージョンを 1.7.0
でやることも試したんですが、諦めた経緯だけ書いておきます。
タスク実行時にエラー
$ ./gradlew dokkaHtml -stacktrace
> Task :dokkaHtml
Initializing plugins
Dokka is performing: documentation for awba-manage
Validity check
Creating documentation models
Transforming documentation model before merging
Merging documentation models
Transforming documentation model after merging
> Task :dokkaHtml FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':dokkaHtml'.
> 'void kotlinx.coroutines.Dispatchers.shutdown()'
・
・
・
Caused by: java.lang.NoSuchMethodError: 'void kotlinx.coroutines.Dispatchers.shutdown()'
・
・
BUILD FAILED in 1m 24s
1 actionable task: 1 executed
エラーの原因は依存関係の解決にあり
kotlinx-coroutines-core:1.3.2
を参照しており、そのバージョンには、存在しないメソッドだからでした。
# 依存関係を確認
./gradlew dependencies
dokkaHtmlPlugin
~
+--- org.jetbrains.dokka:dokka-base:1.7.0
| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0 -> 1.3.2
調べると、Spring Bootのバージョンにkotlinx-coroutines-core
のversionが関連があるっぽいことが書かれてました。
ということで、放置していたバージョンアップをやることにしつつ、一旦1.4系のDokkaを動かすことにしたという感じでした。
https://github.com/Kotlin/dokka/issues/2545
以上です