CLOVER🍀

That was when it all began.

Emacsにlsp-mode+lsp-javaをインストールする

これは、なにをしたくて書いたもの?

自分はJavaソースコードを書く時は、基本的にIntelliJを使っています。

Emacsを使う時は、lsp-modeを設定しているのがTypeScript/JavaScriptPythonくらいでたまにEmacsJavaソースコードを開くと
困ったりしていたので、Javaでも設定しておきたいなということで。

環境

今回の環境はこちら。

$ emacs --version
GNU Emacs 27.1
Copyright (C) 2020 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GNU Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.

OSはUbuntu Linux 22.04 LTSです。

Java

$ java --version
openjdk 21.0.1 2023-10-17
OpenJDK Runtime Environment (build 21.0.1+12-Ubuntu-222.04)
OpenJDK 64-Bit Server VM (build 21.0.1+12-Ubuntu-222.04, mixed mode, sharing)

lsp-java

Javaでlsp-modeを使うには、lsp-javaというパッケージを導入します。

LSP Java

GitHub - emacs-lsp/lsp-java: lsp-mode java

これはEclipse JDTを使ったLanguage Serverをバックエンドに使用するようです。

Eclipse JDT LS | projects.eclipse.org

必要なものはJava 17で、機能としては各種コーディングのサポートからMavenやGradle(こちらは限定的)のサポート、
Spring Initializrとの統合などがあるようです。

まずはパッケージで「lsp-java」をインストールします。今回インストールしたバージョンは「20230922.1154」でした。

そして、init.elに以下の記述を加えます。

(use-package lsp-java)
(add-hook 'java-mode-hook #'lsp)

初回実行時は、Language Serverの自動ダウンロードをするかどうかを聞かれます。ここで「jdtls」が候補にサジェストされるので選択。
インストールは自動で行われます。

インストール時の動きを見ていると、どうもMavenを使っているような感じですね…。

これで、lsp-javaが機能するようになります。

コマンドはこちらを参照。

lsp-modeのコマンドと、lsp-java固有のものがあるようです。

lsp-modenのキーバインディングについては、こちらも合わせて。

Keybindings - LSP Mode - LSP support for Emacs

Language Serverのアップデートはlsp-java-update-serverで行うようです。
なのですが、実際に指定するとlsp-install-serverを使いなさいと言われるので、こちらを実行して「jdtls」と入力すると
アップデートが行われます。

簡単な紹介とセットアップを書いただけですが、IntelliJを使わない場合はこちらも利用していきましょう。