Last time I mentioned that I helped
making it possible for Eglot to use jdtls
, the Python helper script packaged
with Eclipse JDT to start the language server with sane defaults. The only
problem I had during my work on this is that jdtls
requires Python 3.9 or
later, why my Ubuntu 20.04 machine comes with the 3.8.10 version. Since changing
the default Python on Ubuntu can bring pain,1 I decided to have Emacs work
with Python 3.9 only for my Java projects.
First, I installed the required Python packages:
$ sudo apt install python3.9 python3-9-venv
Then, in my Java project root directory I ran:
$ python3.9 -m venv env
Finally, I had to tell Emacs how to interact with this new Python environment.
In the root directory of my project I added a .dir-locals.el
file with the
following content:
((nil . ((buffer-env-command . ">&2 . \"$0\" && env -0")
(buffer-env-script-name . "env/bin/activate")
(python-shell-virtualenv-root . "./env"))))
I am using Augusto Stoffel’s buffer-env
to pick up the activate
script and run it automatically for me. Checking the
Python version with M-! /usr/bin/env python3 -V RET
told me I
was doing the right thing. Keep in mind that you don’t have to set
buffer-env-command
like I do. Here I am setting it back to its default value
because I changed it in my init.el
to specifically deal with direnv
. Anyway,
with everything in place Eglot correctly interfaced with jdtls
for a smooth
Java developing experience.
A note to myself: I will probably need to revisit this setup as soon as I move to the new Ubuntu LTS which, I guess, will provide a more recent Python by default.
-
Trust me on this. ↩︎