NeovimのjdtlsがClient 1 quit with exit code 1 and signal 0で起動しない

概要

NeovimでJavaを書こうとして、JavaのLSPであるjdtlsをMasonを経由してインストールした。しかし、Client 1 quit with exit code 1 and signal 0と表示されるだけで動作せず躓いた。結果的にPython3.9をインストールすることで解決した。

環境

  • WSL2 Ubuntu 20.04
  • Neovim 0.7.0

詳細

github.com

LSPサーバーなどを一括して管理できるMasonを利用してJavaのLSPサーバーであるjdtlsをインストールした。ちなみにjdtlsの中身はEclipseeclipse.jdt.lsのようだ。しかしEclipseを今も使っている人はいるのだろうか。まぁそれは置いておいて、何故かjdtlsをインストールしたのにjavaファイルをNeovimで開いても起動してくれない。LuaのLSPをインストールしたときは特に何も設定せずとも起動していたので、jdtls特有の問題かなと推測していると、

Client 1 quit with exit code 1 and signal 0

というエラー(?)が毎回表示されることに気づいた。とりあえず検索を掛ける。

github.com

issueなどで当たり前だが、トラブルシューティングを見なさいと言われているので確認してみると、.cache/nvim以下にlsp.logというログが残っているらしいので中を見てみる。案の定、怪しいエラーログが残されていた。

[ERROR][2022-09-16 17:29:45] .../vim/lsp/rpc.lua:420 "rpc"   "jdtls" "stderr"    "Traceback (most recent call last):\n  File \"/home/moyashi/.local/share/nvim/mason/bin/jdtls\", line 17, in <module>\n    jdtls.main(sys.argv[1:])\n  File \"/home/moyashi/.local/share/nvim/mason/packages/jdtls/bin/jdtls.py\", line 68, in main\n    parser.add_argument(\"--validate-java-version\", default=True, action=argparse.BooleanOptionalAction)\nAttributeError: module 'argparse' has no attribute 'BooleanOptionalAction'\n"

nono.ma

モジュール 'argparse' には属性 'BooleanOptionalAction' がありません。とのことらしい。検索を掛けると上記のブログ記事が見つかった。BooleanOptionalActionというPythonの機能はPython3.9以降でないと使用できないらしい。自分の環境のバージョンを調べると3.8であった。3.9をインストールする。

www.python.jp

$ sudo apt update
$ sudo apt install build-essential libbz2-dev libdb-dev \
   libreadline-dev libffi-dev libgdbm-dev liblzma-dev \
   libncursesw5-dev libsqlite3-dev libssl-dev \
   zlib1g-dev uuid-dev tk-dev
$ wget https://www.python.org/ftp/python/3.9.14/Python-3.9.14.tar.xz
$ tar xJf Python-3.9.14.tar.xz
$ ./Pytohn-3.9.14/.configure
$ make
$ sudo make install

Pythonのバージョンを確認

$ python3 -V

インストールが終わると、jdtlsが動作するようになった。先述した海外の方の記事が非常に助かった。BooleanOptionalActionでヒットした情報がその方の記事しか自分には見つけられなかったので、無ければ詰んでいた可能性が高い。感謝です。