やりたいこと

VSCodeの『Language Support for Java(TM) by Red Hat』という拡張にはjava.autobuild.enabledというオプションがあり、これはデフォルトでtrueになっている。

つまりVSCodeではjava.project.sourcePathsjava.project.outputPathjava.project.referencedLibrariesなどの設定を適切に行っていれば、Javaのコードの保存時に自動でビルドが走る。

ところがGradleを使っているプロジェクトでは自動ビルドが走らなくなる。

試してはいないが恐らくMavenを使っている場合も同様だと思われる。

要するにjavacには対応してくれているが、./gradlew buildには対応してくれていないということなんだろうと思う。

Gradleを使っているプロジェクトでも素のJavaプロジェクト同様に自動ビルドが走るように設定をしていく。

方法

1. Run on Save拡張をインストール

Run on Saveという、保存時に指定したコマンドを実行してくれるVSCode拡張があるのでインストールする。

2. settings.jsonを編集

VSCodeの設定ファイルであるsettings.jsonを編集して、コードの保存時に./gradlew buildを実行するように設定する。

.vscode/settings.json
{
  "java.home": "/Users/zurukumo/.jenv/versions/21",
  "java.import.gradle.java.home": "/Users/zurukumo/.jenv/versions/21",
  "java.import.gradle.enabled": true,
  "java.project.sourcePaths": ["src/main/java"],
  "emeraldwalk.runonsave": {
    "commands": [
      {
        "match": "\\.java$",
        "cmd": "JAVA_HOME=/Users/zurukumo/.jenv/versions/21 ./gradlew build"
      }
    ]
  }
}

"match": "\\.java$"と書くことで、ファイル名が.javaで終わっているファイルの保存時にのみコマンドが実行されるようになる。

ちなみにjava.homeを指定していてもRun on Saveからは読み込まれていないっぽく、仕方がないのでコマンドの前にJAVA_HOME=/Users/zurukumo/.jenv/versions/21と環境変数を記述した。

二重に書いている感じが気持ち悪いが、今の自分の実力ではこれが限界…。

まとめ

絶対にもっと良い方法がある気がする。

もっと良い方法を知っている方はコメントで教えて欲しい。

EclipseとかIntelliJ IDEAとかだったらこんなに面倒なことをしなくても自動でビルドしてくれるんだろうか?