doomemacs/modules/lang/java
Henrik Lissner 6be2262423 Bump :lang
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
2021-07-11 17:52:08 -04:00
..
autoload Rename Groovy REPL command 2021-04-16 23:22:30 +07:00
+eclim.el Refactor localleader keybinds #1270 2019-10-04 22:04:47 -04:00
+lsp.el Don't load lsp-java/dap-java if +eglot 2020-10-14 01:40:11 -04:00
+meghanada.el lang/java: fail meghanada-mode gracefully if java is absent 2021-04-15 14:19:18 -04:00
config.el Rename Groovy REPL command 2021-04-16 23:22:30 +07:00
doctor.el Only check when formatting feature is enabled. 2020-10-06 17:38:10 +02:00
packages.el Bump :lang 2021-07-11 17:52:08 -04:00
README.org Configure java +lsp test runner via dap-mode (#3049) 2020-05-08 05:54:54 -04:00

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.