200ok-ch/counsel-jq@f5bfed8 -> 200ok-ch/counsel-jq@153d70b Andersbakken/rtags@63a7d9b -> Andersbakken/rtags@aa4c827 MatthewFluet/company-mlton@b87e363 -> MatthewFluet/company-mlton@9b09d20 NixOS/nix-mode@e32c6bf -> NixOS/nix-mode@0023fc5 OmniSharp/omnisharp-emacs@e26ff8b -> OmniSharp/omnisharp-emacs@8ec5929 ProofGeneral/PG@702f5b9 -> ProofGeneral/PG@bdb6782 Wilfred/elisp-def@da1f763 -> Wilfred/elisp-def@dfca043 agda/agda@5070bd8 -> agda/agda@9d08edb ananthakumaran/exunit.el@c77b039 -> ananthakumaran/exunit.el@5bb115f ananthakumaran/tide@a43a37b -> ananthakumaran/tide@7f7334b asok/projectile-rails@7a256b1 -> asok/projectile-rails@8d6b373 brotzeit/rustic@f7d5ac0 -> brotzeit/rustic@61d600e clojure-emacs/cider@1a34f89 -> clojure-emacs/cider@815204f clojure-emacs/clj-refactor.el@9dcc50d -> clojure-emacs/clj-refactor.el@b24ce76 clojure-emacs/clojure-mode@53ef8ac -> clojure-emacs/clojure-mode@f26379b crystal-lang-tools/emacs-crystal-mode@f9e4db1 -> crystal-lang-tools/emacs-crystal-mode@1599814 cython/cython@17e03b8 -> cython/cython@9a761a6 dgutov/robe@f04dcc7 -> dgutov/robe@3ef165c diml/utop@7bc5117) -> diml/utop@a5ff52b) dominikh/go-mode.el@fdf46fe -> dominikh/go-mode.el@49a5380 elixir-editors/emacs-elixir@b78e7f7 -> elixir-editors/emacs-elixir@9de08c1 emacs-csharp/csharp-mode@4916829 -> emacs-csharp/csharp-mode@09b4d57 emacs-ess/ESS@d013616 -> emacs-ess/ESS@5169b0d emacs-lsp/lsp-dart@b81b1ec -> emacs-lsp/lsp-dart@71902ca emacs-lsp/lsp-haskell@4d85cb3 -> emacs-lsp/lsp-haskell@7efbef3 emacs-lsp/lsp-java@f43b00a -> emacs-lsp/lsp-java@5f6d357 emacs-lsp/lsp-metals@31dafff -> emacs-lsp/lsp-metals@c76eeb6 emacs-lsp/lsp-pyright@71ff088 -> emacs-lsp/lsp-pyright@65fb141 emacs-lsp/lsp-python-ms@5470ada -> emacs-lsp/lsp-python-ms@689f6cf emacs-lsp/lsp-sourcekit@948c3a3 -> emacs-lsp/lsp-sourcekit@ff204ed emacs-php/php-mode@7e5722c -> emacs-php/php-mode@8cdc727 emacs-straight/auctex@fb062a3 -> emacs-straight/auctex@384c4b9 emacs-straight/csv-mode@eb3ec00 -> emacs-straight/csv-mode@8da54e8 emacs-straight/org-mode@9e98e9a -> emacs-straight/org-mode@0b117f7 emacs-typescript/typescript.el@54f14c4 -> emacs-typescript/typescript.el@1043025 emacsmirror/cmake-mode@e58c411 -> emacsmirror/cmake-mode@d5d77de ericdallo/hover.el@3f07a18 -> ericdallo/hover.el@c9c0593 erlang/otp@8fc0641 -> erlang/otp@af06b43 eschulte/jump.el@e4f1372 -> eschulte/jump.el@55caa66 ethereum/emacs-solidity@d166a86 -> ethereum/emacs-solidity@b4fd719 factor/factor@94a922a -> factor/factor@1928e60 fsharp/emacs-fsharp-mode@13fbf4c -> fsharp/emacs-fsharp-mode@78898a1 fxbois/web-mode@890e837 -> fxbois/web-mode@8ef4793 godotengine/emacs-gdscript-mode@75fe658 -> godotengine/emacs-gdscript-mode@16c631c greghendershott/racket-mode@3563081 -> greghendershott/racket-mode@75ea8f6 haskell/haskell-mode@0d39c84 -> haskell/haskell-mode@3a019e6 hhvm/hack-mode@9079bc3) -> hhvm/hack-mode@847fd91) hvesalai/emacs-scala-mode@9d3b56e -> hvesalai/emacs-scala-mode@402d6df idris-hackers/idris-mode@b77eadd -> idris-hackers/idris-mode@80aabd2 immerrr/lua-mode@d2ff304 -> immerrr/lua-mode@2d9a468 iyefrat/evil-tex@ac313ef -> iyefrat/evil-tex@5f0d6fb jaor/geiser@cd00be6 -> jaor/geiser@26dd2f4 jcollard/elm-mode@363da4b -> jcollard/elm-mode@188b9c7 joaotavora/sly@3278819 -> joaotavora/sly@fb84318 jorgenschaefer/emacs-buttercup@2f24a44 -> jorgenschaefer/emacs-buttercup@1de6be4 jrblevin/markdown-mode@dcad557 -> jrblevin/markdown-mode@0517340 jwiegley/emacs-async@14f48de -> jwiegley/emacs-async@d7e7f79 jyp/attrap@9c88154 -> jyp/attrap@778382e jyp/dante@e2acbf6 -> jyp/dante@7b1ab64 kaushalmodi/ox-hugo@04f41ca -> kaushalmodi/ox-hugo@a05667e leanprover/lean-mode@cc1f5fa -> leanprover/lean-mode@15bee87 ledger/ledger-mode@805507f -> ledger/ledger-mode@3495d12 mooz/js2-mode@f7816bd -> mooz/js2-mode@29979e5 nonsequitur/inf-ruby@b012457 -> nonsequitur/inf-ruby@1fc972e ocaml-ppx/ocamlformat@860266b -> ocaml-ppx/ocamlformat@7db8d13 ocaml/dune@4d097cd -> ocaml/dune@f839fc1 ocaml/merlin@28193d5 -> ocaml/merlin@36d0aef pezra/rspec-mode@f1029ca -> pezra/rspec-mode@92ef785 polymode/poly-R@51ffeb6 -> polymode/poly-R@c42ff3a polymode/polymode@3284ff1 -> polymode/polymode@b3871e9 purescript-emacs/psc-ide-emacs@663f4e2 -> purescript-emacs/psc-ide-emacs@ce97d71 purescript-emacs/purescript-mode@154ad16 -> purescript-emacs/purescript-mode@8410baf pwalsh/pipenv.el@f516a1a -> pwalsh/pipenv.el@8f50c68 pythonic-emacs/anaconda-mode@b1875a5 -> pythonic-emacs/anaconda-mode@081f9d8 racer-rust/emacs-racer@a0bdf77 -> racer-rust/emacs-racer@f17f9d7 rubocop-hq/rubocop-emacs@03bf155 -> rubocop-hq/rubocop-emacs@1372ee3 seagle0128/grip-mode@91da46f -> seagle0128/grip-mode@1aebf9c senny/rvm.el@b2498a4 -> senny/rvm.el@c1f2642 swift-emacs/swift-mode@0bc8d8d -> swift-emacs/swift-mode@95ff004 takaxp/org-tree-slide@04b5a9d -> takaxp/org-tree-slide@c9487e5 technomancy/fennel-mode@fa56106 -> technomancy/fennel-mode@bebc9dd tpapp/julia-repl@d073acb -> tpapp/julia-repl@7ce38a9 wbolster/emacs-python-pytest@3fadf1f -> wbolster/emacs-python-pytest@31ae5e0 wwwjfy/emacs-fish@db257db -> wwwjfy/emacs-fish@a7c953b Fix #4695 Close #4529 Close #4576
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.