200ok-ch/counsel-jq@153d70b -> 200ok-ch/counsel-jq@8cadd2e Andersbakken/rtags@63f18ac -> Andersbakken/rtags@65113e2 Groovy-Emacs-Modes/groovy-emacs-modes@26da902 -> Groovy-Emacs-Modes/groovy-emacs-modes@99eaf70 NixOS/nix-mode@0023fc5 -> NixOS/nix-mode@3cca5b6 ProofGeneral/PG@f0f0476 -> ProofGeneral/PG@bc86736 Raku/raku-mode@8a6e17f -> Raku/raku-mode@7496ad3 StanfordLegion/terra-mode@1e5e824 -> StanfordLegion/terra-mode@eab9e59 TheBB/company-reftex@291c283 -> TheBB/company-reftex@42eb98c agda/agda@ecb9323 -> agda/agda@af9c4b9 ananthakumaran/tide@ad6fa78 -> ananthakumaran/tide@ccff099 asok/projectile-rails@f1fe6e8 -> asok/projectile-rails@6a18ada beancount/beancount-mode@3c04745 -> beancount/beancount-mode@02fe03e brotzeit/rustic@ed68fd3 -> brotzeit/rustic@6ca73bb cdominik/cdlatex@adf96ba -> cdominik/cdlatex@614a8d9 clojure-emacs/clojure-mode@a14671e -> clojure-emacs/clojure-mode@3e426b3 cython/cython@9decfca -> cython/cython@fae33cf dgutov/robe@126650a -> dgutov/robe@e1304d1 diml/utop@711c246 -> diml/utop@c87b8b2 dominikh/go-mode.el@49a5380 -> dominikh/go-mode.el@3497434 elixir-editors/emacs-elixir@0212b06 -> elixir-editors/emacs-elixir@6bbc1e5 emacs-csharp/csharp-mode@f977800 -> emacs-csharp/csharp-mode@093f0f2 emacs-ess/ESS@126d344 -> emacs-ess/ESS@4fefd0f emacs-lsp/lsp-dart@f3b70ec -> emacs-lsp/lsp-dart@01d89d4 emacs-lsp/lsp-haskell@7efbef3 -> emacs-lsp/lsp-haskell@eb37ac4 emacs-lsp/lsp-java@9685334 -> emacs-lsp/lsp-java@b66a075 emacs-lsp/lsp-metals@51a89c1 -> emacs-lsp/lsp-metals@9f82ebe emacs-lsp/lsp-pyright@65fb141 -> emacs-lsp/lsp-pyright@71a7976 emacs-lsp/lsp-sourcekit@aafa987 -> emacs-lsp/lsp-sourcekit@ae4aa87 emacs-php/php-mode@a2bca9b -> emacs-php/php-mode@cbf2723 emacs-php/phpactor.el@80788a8 -> emacs-php/phpactor.el@272217f emacs-straight/auctex@1472d1d -> emacs-straight/auctex@ea410dc erlang/otp@94c9738 -> erlang/otp@645ea81 ethereum/emacs-solidity@b4fd719 -> ethereum/emacs-solidity@5f6ef31 factor/factor@5bfeab6 -> factor/factor@b989a86 fsharp/emacs-fsharp-mode@78898a1 -> fsharp/emacs-fsharp-mode@93b1fbc godotengine/emacs-gdscript-mode@16c631c -> godotengine/emacs-gdscript-mode@b7bfa6a greghendershott/racket-mode@5115c47 -> greghendershott/racket-mode@7f12cb1 haskell/haskell-mode@1baa12a -> haskell/haskell-mode@98ba392 hhvm/hack-mode@847fd91 -> hhvm/hack-mode@f9315be hlissner/emacs-pug-mode@685fd34 -> hlissner/emacs-pug-mode@d080904 hvesalai/emacs-sbt-mode@0bdc36b -> hvesalai/emacs-sbt-mode@e29464a idris-hackers/idris-mode@80aabd2 -> idris-hackers/idris-mode@f52ad0b immerrr/lua-mode@2d9a468 -> immerrr/lua-mode@2bd9077 iyefrat/evil-tex@5f0d6fb -> iyefrat/evil-tex@87445d4 jcollard/elm-mode@e9fcf9c -> jcollard/elm-mode@f2e2d00 joaotavora/sly@5966d68 -> joaotavora/sly@41f4d65 jorgenschaefer/pyvenv@9b3678b -> jorgenschaefer/pyvenv@045ff94 jrblevin/markdown-mode@ac9ea26 -> jrblevin/markdown-mode@359347b jwiegley/emacs-async@d7e7f79 -> jwiegley/emacs-async@9a8cd0c jyp/attrap@778382e -> jyp/attrap@a5bc695 leanprover/lean-mode@5c50338 -> leanprover/lean-mode@bf32bb9 ledger/ledger-mode@32fef09 -> ledger/ledger-mode@19b84dc nathankot/company-sourcekit@abf9bc5 -> nathankot/company-sourcekit@a1860ad necaris/conda.el@dce431b -> necaris/conda.el@6db0720 non-Jedi/eglot-jl@84cff9d -> non-Jedi/eglot-jl@49f170e nonsequitur/inf-ruby@c6990a6 -> nonsequitur/inf-ruby@03dd9c9 ocaml-ppx/ocamlformat@0ad8d0a -> ocaml-ppx/ocamlformat@5dd6574 ocaml/dune@65e04ba -> ocaml/dune@75ecfe3 ocaml/merlin@635923d -> ocaml/merlin@5731826 ocaml/tuareg@37a6730 -> ocaml/tuareg@b59c422 pashky/restclient.el@abc307b -> pashky/restclient.el@2cc1fd3 polymode/polymode@b3871e9 -> polymode/polymode@7d1f822 pythonic-emacs/anaconda-mode@344727c -> pythonic-emacs/anaconda-mode@4f367c7 seagle0128/grip-mode@2855205 -> seagle0128/grip-mode@c0ca789 sebasmonia/sharper@d610b83 -> sebasmonia/sharper@08277b6 swift-emacs/swift-mode@ad12a30 -> swift-emacs/swift-mode@1b47a09 technomancy/fennel-mode@ba14a7d -> technomancy/fennel-mode@a908db8 tpapp/julia-repl@7ce38a9 -> tpapp/julia-repl@79e686e ziglang/zig-mode@2d0eb23 -> ziglang/zig-mode@0babe7e Closes #5221
lang/java
Description
This module adds java support to Doom Emacs, including android-mode
and
groovy-mode
.
Module Flags
+lsp
Enables integration for the eclipse.jdt.ls LSP server.+meghanada
Enables the meghanada-mode
The +lsp
and +meghanada
packages are mutually exclusive and do not work
together. At the time of writing the +meghanada
is already configured whereas
+lsp
needs to manual configuring.
The lsp
test runner requires that :tools (debugger +lsp)
is enabled, as this
provides dap-mode
which contains the Java test runner.
Prerequisites
This module requires the Java SDK.
OpenJDK 11
Ubuntu
sudo apt-get install openjdk-11-jdk-headless
Fedora
sudo dnf install java-11-openjdk
Oracle JDK 11
Ubuntu
sudo add-apt-repository ppa:linuxuprising/java
sudo apt update
sudo apt install oracle-java11-installer
sudo apt install oracle-java11-set-default
Fedora
curl -O https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
tar zxvf openjdk-11.0.2_linux-x64_bin.tar.gz
sudo mv jdk-11.0.2/ /usr/local/
Open /etc/profile.d/jdk11.sh
as root and add
export JAVA_HOME=/usr/local/jdk-11.0.2
export PATH=$PATH:$JAVA_HOME/bin
Save the file and source the file
source /etc/profile.d/jdk11.sh
java -version
Multiple Java Versions
It is common to need support for multiple Java versions. You can use a generic tool like jabba to install and manage multiple Java versions on any OS.
To switch between Java versions in Doom, you can use direnv and the direnv module. To set a
Java version for a particular project, create a .envrc
pointing to the Java
installation in the root of the project:
PATH_add ~/.jabba/jdk/adopt@1.11.0-3
JAVA_HOME=~/.jabba/jdk/adopt@1.11.0-3
And then run direnv allow .
in the project directory. If the direnv
module
is enabled, then Doom will automatically source this environment before
executing the LSP server.
Features
+lsp
features
According to https://github.com/emacs-lsp/lsp-java it adds
- As you type reporting of parsing and compilation errors (via flycheck/lsp-ui)
- Code completion - using company-lsp or builtin complete-at-point
- Javadoc hovers - using lsp-ui
- Code actions - using lsp-ui
- Code outline - using builtin imenu
- Code navigation - using builtin xref
- Code lens (references/implementations) - using builtin xref
- Highlights
- Code formatting
- Maven pom.xml project support
- Limited Gradle support
- Visual debugger - dap-mode
- Test runner - dap-mode
- Project explorer integration - treemacs
- Integration with Spring Initializr
+meghanada
features
According to https://github.com/mopemope/meghanada-emacs/ it adds
- Auto-update server module
- Gradle and Maven and Eclipse project support
- No need build tool's plugin
- Run build tool task
- Compile your project
- Syntax check and analyze java source (
flycheck-meghanada
) - Support
Generic Types
- Code completion with company-mode (
company-meghanada
) - Optimize import and sort
- Jump declaration
- Run JUnit test (include test runner)
- Diagnostic reporting with flycheck (
flycheck-meghanada
) - Show symbol's type info with
el-doc
- Search references
- Full-featured text search
Configuration
+lsp
Install the eclipse server by executing M-x lsp-install-server
and selecting
jdtls
. After that any newly opened java
files should start the LSP server
automatically.
To update the server, perform SPC u M-x lsp-install-server
.
Note that if you change Java version you may need to remove the LSP server and
install it again. You can do this with M-x +lsp/uninstall-server
followed by
M-x lsp-install-server
.
Enable the :tools (debugger +lsp)
module to get test runner support.