これは、なにをしたくて書いたもの?
自分はJavaのソースコードを書く時は、基本的にIntelliJを使っています。
Emacsを使う時は、lsp-modeを設定しているのがTypeScript/JavaScript、PythonくらいでたまにEmacsでJavaのソースコードを開くと
困ったりしていたので、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というパッケージを導入します。
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を使わない場合はこちらも利用していきましょう。