kdnakt blog

hello there.

IntelliJのGradleタスクがOne of setGitDir or setWorkTree must be called.というエラーで異常終了した

1年ぶり2度目の遭遇です(泣)。

kdnakt.hatenablog.com

[発生事象]

IntelliJでGradleプロジェクトを開くと、見覚えのあるエラーがコンソールに表示された。

* What went wrong:
Execution failed for task ':getVersion'.
> One of setGitDir or setWorkTree must be called.

JGitのライブラリを利用しているところでエラーなのは昨年と同じ。

昨年同様のデバッグログを仕込むと、プロジェクトのルートディレクトリが取得できるはずの箇所がなぜかGradleデーモンのディレクトリになっており、昨年と同じ事象と判明(泣)。

[調査・解決]

流石に、JDKのバグが再発していることもなかろうと思い、JDKのissueを探してみるも、それらしいものは見当たらなかった。

bugs.openjdk.org

問題になった元のチケットを見なおしてみると、Java 11での変更がJava 8にバックポートされて、昨年の問題を引き起こしていた。そして、問題が修正されたのはJava 8の方だけ...。

bugs.openjdk.org

ということは、インストールしたJava 8ではなく、別の11以降のバージョンが利用されている可能性がある?と考え、調査を継続。System.getProperties()で出力したログを見ると、使った覚えのないAzureJDK13になっていることが判明。

どこで設定してるんだ?と思いながら必死でIntelliJの設定を漁っていると、Gradleが利用するJDKの設定がAzul JDK 13になっていたことが判明。

Gradle JVMの設定をJava 8に変更したらビルドが通った。めでたしめでたし。とはいえ、結局これはどうしたらいいんだ...Javaバージョンを上げられないのか?

github.com

[まとめ]

  • Java 11以降でuser.dirプロパティを変更できなくなっており、JGit利用時にsetGitDir must be calledのエラーが出る
  • IntelliJでGradleを動かす場合、WindowsJAVA_HOMEの設定よりGradle JVMの設定が優先される
  • Gradle JVMの設定をJava 8に変更すればJGit利用時もエラーが出ない
  • Java 11以降にバージョンアップする方法は要調査