doomemacs/modules/lang/java
Henrik Lissner cf2663ab7b
Bump *
bbatsov/projectile@bbcf781 -> bbatsov/projectile@46d2010
domtronn/all-the-icons.el@ed8e44d -> domtronn/all-the-icons.el@8c02280
emacsmirror/straight@fc077dd -> emacsmirror/straight@0c7c757
justbur/emacs-which-key@3642c11 -> justbur/emacs-which-key@e48e190
jwiegley/use-package@7d92536 -> jwiegley/use-package@4fb1f9a
purcell/ns-auto-titlebar@1efc30d -> purcell/ns-auto-titlebar@60273e7

+ :app
  - :app calendar
    kidd/org-gcal.el@7445058 -> kidd/org-gcal.el@2cad2d8
  - :app irc
    jorgenschaefer/circe@e5bf5f8 -> jorgenschaefer/circe@89aac22
  - :app rss
    skeeto/elfeed@d0405e6 -> skeeto/elfeed@8fb09ad
  - :app twitter
    abo-abo/avy@509471b -> abo-abo/avy@bbf1e73
+ :completion
  - :completion company
    company-mode/company-mode@5eb7d86 -> company-mode/company-mode@54f60ef
    sebastiencs/company-box@889d723 -> sebastiencs/company-box@20384f0
  - :completion helm
    emacs-helm/helm@5d224cb -> emacs-helm/helm@e9a1e53
    tumashu/posframe@922e4d2 -> tumashu/posframe@7b92a54
  - :completion ivy
    abo-abo/swiper@c6b60d3 -> abo-abo/swiper@9bb6841
    raxod502/prescient.el@b11d79b -> raxod502/prescient.el@cc289ba
    snyball/ivy-posframe@4474956 -> snyball/ivy-posframe@82a63ae
+ :checkers
  - :checkers syntax
    alexmurray/flycheck-posframe@2b3e94c -> alexmurray/flycheck-posframe@c928b5b
+ :editor
  - :editor evil
    emacs-evil/evil@2bc6ca3 -> emacs-evil/evil@1e7aa5b
    emacs-evil/evil-collection@3e62b6b -> emacs-evil/evil-collection@c136589
  - :editor fold
    seregaxvm/vimish-fold@6368523 -> seregaxvm/vimish-fold@9d12e39
  - :editor god
    emacsorphanage/god-mode@1eb6ef3 -> emacsorphanage/god-mode@ad2e674
  - :editor lispy
    abo-abo/lispy@cdaa9c7 -> abo-abo/lispy@0a9dcfd
    noctuid/lispyville@25a7012 -> noctuid/lispyville@0f13f26
  - :editor objed
    clemera/objed@e89d8da -> clemera/objed@dea5a64
  - :editor snippets
    joaotavora/yasnippet@5b1217a -> joaotavora/yasnippet@5cbdbf0
    hlissner/doom-snippets@21b7c8d -> hlissner/doom-snippets@60c57d6
  - :editor word-wrap
    emacs-straight/adaptive-wrap@1810c0e -> emacs-straight/adaptive-wrap@319db64
+ :emacs
  - :emacs dired
    purcell/diredfl@83567d0 -> purcell/diredfl@cd052df
  - :emacs ibuffer
    purcell/ibuffer-projectile@504b0ed -> purcell/ibuffer-projectile@ecbe482
    purcell/ibuffer-vc@1249c1e -> purcell/ibuffer-vc@5fa6aea
  - :emacs undo
    emacs-straight/undo-tree@5b6df03 -> emacs-straight/undo-tree@7523823
    ideasman42/emacs-undo-fu@46de023 -> ideasman42/emacs-undo-fu@c0806c1
  - :emacs vc
    magit/magit@d459e52 -> magit/magit@321214c
    pidu/git-timemachine@391eb61 -> pidu/git-timemachine@8d67575
+ :email
  + :email notmuch
    https://git.notmuchmail.org/git/notmuch@ad9c2e9 -> https://git.notmuchmail.org/git/notmuch@8776faf
    org-mime/org-mime@9f84446 -> org-mime/org-mime@9bb6351
  + :email wanderlust
    wanderlust/semi@57a948c -> wanderlust/semi@10897f0
+ :input
  - :input japanese
    skk-dev/ddskk@fe7f82b -> skk-dev/ddskk@275a831
+ :lang
  - :lang agda
    agda/agda@8eb0d01 -> agda/agda@36738c1
  - :lang cc
    Andersbakken/rtags@080cb0e -> Andersbakken/rtags@b57b360
    MaskRay/emacs-ccls@44f1fb3 -> Sarcasm/irony-mode@5f75fc0
    emacsmirror/cmake-mode@bfe85bc -> emacsmirror/cmake-mode@e58c411
  - :lang common-lisp
    joaotavora/sly@becf7b7 -> joaotavora/sly@155cb06
  - :lang coq
    ProofGeneral/PG@0f0bb2c -> ProofGeneral/PG@03e427a
    cpitclaudel/company-coq@7ec8058 -> cpitclaudel/company-coq@b096cb5
  - :lang dart
    emacs-lsp/lsp-dart@a06fc74 -> emacs-lsp/lsp-dart@437c548
  - :lang elixir
    elixir-editors/emacs-elixir@02a3922 -> elixir-editors/emacs-elixir@01b3324
  - :lang elm
    jcollard/elm-mode@7782be0 -> jcollard/elm-mode@363da4b
  - :lang emacs-lisp
    clojure-emacs/cider@9e117c2 -> clojure-emacs/cider@a89b694
    clojure-emacs/clojure-mode@da9f1ec -> clojure-emacs/clojure-mode@84ed16c
    jorgenschaefer/emacs-buttercup@e71a40f -> jorgenschaefer/emacs-buttercup@0e5eae0
    xuchunyang/elisp-demos@4cd55a3 -> xuchunyang/elisp-demos@8c97481
  - :lang erlang
    erlang/otp@3065fbf -> erlang/otp@d9bc785
  - :lang ess
    emacs-ess/ESS@3c2fb63 -> emacs-ess/ESS@1baf8bf
  - :lang fuel
    factor/factor@497d649 -> factor/factor@3fdb032
  - :lang fsharp
    fsharp/emacs-fsharp-mode@8c86e38 -> fsharp/emacs-fsharp-mode@3e41fe1
  - :lang fstar
    FStarLang/fstar-mode.el@aaaf256 -> FStarLang/fstar-mode.el@bd28cb8
  - :lang haskell
    jyp/dante@7411904 -> jyp/dante@c516bc9
  - :lang hy
    hylang/hy-mode@e2d5fec -> hylang/hy-mode@55e84ca
  - :lang idris
    idris-hackers/idris-mode@acc8835 -> idris-hackers/idris-mode@b77eadd
  - :lang java
    mopemope/meghanada-emacs@e119c7b -> mopemope/meghanada-emacs@1e41f7f
  - :lang javascript
    ananthakumaran/tide@13e7af7 -> ananthakumaran/tide@f0b6dac
    emacs-typescript/typescript.el@0fc7297 -> emacs-typescript/typescript.el@42a60e5
    mooz/js2-mode@5049e54 -> mooz/js2-mode@40aab27
  - :lang julia
    JuliaEditorSupport/julia-emacs@1c122f1 -> JuliaEditorSupport/julia-emacs@b5f5983
    tpapp/julia-repl@5fa04de -> tpapp/julia-repl@d073acb
  - :lang kotlin
    Emacs-Kotlin-Mode-Maintainers/kotlin-mode@ab61099 -> Emacs-Kotlin-Mode-Maintainers/kotlin-mode@8e6dd57
  - :lang latex
    emacs-straight/adaptive-wrap@1810c0e -> emacs-straight/adaptive-wrap@319db64
    emacs-straight/auctex@6abf890 -> emacs-straight/auctex@59e251c
    iyefrat/evil-tex@bb01576 -> iyefrat/evil-tex@06234c9
  - :lang lean
    leanprover/lean-mode@65b55b1 -> leanprover/lean-mode@6b43776
  - :lang ledger
    ledger/ledger-mode@7d78645 -> ledger/ledger-mode@805507f
  - :lang markdown
    Fanael/edit-indirect@935ded3 -> Fanael/edit-indirect@bdc8f54
    jrblevin/markdown-mode@fa9fa20 -> jrblevin/markdown-mode@ef2cb4d
    seagle0128/grip-mode@52768a0 -> seagle0128/grip-mode@281ada2
  - :lang nix
    NixOS/nix-mode@a00b3f7 -> NixOS/nix-mode@0cf1ea1
  - :lang ocaml
    ocaml-ppx/ocamlformat@27a49cc -> ocaml-ppx/ocamlformat@cd0eaa8
    ocaml/dune@66cfb3a -> ocaml/dune@daea74e
  - :lang org
    abo-abo/org-download@768716b -> abo-abo/org-download@67b3c74
    bastibe/org-journal@a6378dc -> bastibe/org-journal@a2728e2
    dzop/emacs-jupyter@785edbb -> dzop/emacs-jupyter@360cae2
    emacs-straight/org-mode@a1e5bee -> emacs-straight/org-mode@220f2b0
    hniksic/emacs-htmlize@86f22f2 -> hniksic/emacs-htmlize@4920510
    integral-dw/org-superstar-mode@1748185 -> integral-dw/org-superstar-mode@94f35c2
    oer/org-re-reveal@c548e23 -> oer/org-re-reveal@7fe39d5
    org-roam/company-org-roam@5d7ccd9 -> org-roam/company-org-roam@1132663
    org-roam/org-roam@0aa0a7c -> org-roam/org-roam@c33867e
  - :lang php
    emacs-php/php-mode@4345dfd -> emacs-php/php-mode@f4c7c69
    jwiegley/emacs-async@86aef2c -> jwiegley/emacs-async@36a1015
  - :lang plantuml
    skuro/plantuml-mode@ea45a13 -> skuro/plantuml-mode@5889166
  - :lang python
    cython/cython@0208bf2 -> cython/cython@fcfd16c
    emacs-lsp/lsp-pyright@3cf2e8f -> emacs-lsp/lsp-pyright@9603dda
    emacs-lsp/lsp-python-ms@7a502e6 -> emacs-lsp/lsp-python-ms@a884a9a
    necaris/conda.el@9d02130 -> necaris/conda.el@9f7eea1
    wbolster/emacs-python-pytest@6a3b4e5 -> wbolster/emacs-python-pytest@fc056fa
  - :lang racket
    greghendershott/racket-mode@29afd25 -> greghendershott/racket-mode@c55fd70
  - :lang rest
    pashky/restclient.el@e8ca809 -> pashky/restclient.el@ac8aad6
  - :lang ruby
    nonsequitur/inf-ruby@f3c927c -> nonsequitur/inf-ruby@9f0f79f
  - :lang rust
    brotzeit/rustic@0ec0688 -> brotzeit/rustic@75b9920
  - :lang scala
    emacs-lsp/lsp-metals@3d4d4b7 -> emacs-lsp/lsp-metals@039aa72
    hvesalai/emacs-sbt-mode@633a315 -> hvesalai/emacs-sbt-mode@4358ed8
    hvesalai/emacs-scala-mode@46bb948 -> hvesalai/emacs-scala-mode@1d08e88
  - :lang scheme
    flatwhatson/flycheck-guile@f37b614 -> flatwhatson/flycheck-guile@2940f16
    jaor/geiser@0c86289 -> jaor/geiser@adc5c4a
  - :lang solidity
    ethereum/emacs-solidity@022b315 -> ethereum/emacs-solidity@d166a86
  - :lang swift
    emacs-lsp/lsp-sourcekit@04d75b6 -> emacs-lsp/lsp-sourcekit@130f7a8
    swift-emacs/swift-mode@2ab9ea1 -> swift-emacs/swift-mode@d266fbd
  - :lang web
    fxbois/web-mode@a2badd0 -> fxbois/web-mode@60ffd87
  - :lang yaml
    yoshiki/yaml-mode@cecf4b1 -> yoshiki/yaml-mode@68fecb5
+ :term
  - :term term
    manateelazycat/multi-term@7307ddd -> manateelazycat/multi-term@017c77c
+ :tools
  - :tools ansible
    yoshiki/yaml-mode@34648f2 -> yoshiki/yaml-mode@68fecb5
  - :tools debugger
    emacs-lsp/dap-mode@85a6163 -> emacs-lsp/dap-mode@4b18543
    realgud/realgud@5b0ed08 -> realgud/realgud@332d136
    tumashu/posframe@6d604a7 -> tumashu/posframe@7b92a54
  - :tools docker
    Silex/docker.el@d6233bd -> Silex/docker.el@3773112
  - :tools editorconfig
    editorconfig/editorconfig-emacs@9a73ff7 -> editorconfig/editorconfig-emacs@9bc1343
  - :tools ein
    millejoh/emacs-ipython-notebook@ccbed30 -> millejoh/emacs-ipython-notebook@99a4718
  - :tools lookup
    jacktasia/dumb-jump@b815731 -> jacktasia/dumb-jump@0d74b2f
  - :tools lsp
    emacs-lsp/helm-lsp@5c960e7 -> emacs-lsp/helm-lsp@4263c96
    emacs-lsp/lsp-mode@edb8119 -> emacs-lsp/lsp-mode@4145a70
    emacs-lsp/lsp-ui@1f3e970 -> emacs-lsp/lsp-ui@c39ae37
    joaotavora/eglot@fb6b17e -> joaotavora/eglot@5f873d2
  - :tools magit
    magit/forge@2c48746 -> magit/forge@feee7e2
    magit/magit@798aff5 -> magit/magit@321214c
  - :tools pass
    zx2c4/password-store@07b169e -> zx2c4/password-store@06f4999
  - :tools rgb
    emacs-straight/rainbow-mode@f780ddb -> emacs-straight/rainbow-mode@fdff98b
+ :ui
  - :ui doom
    hlissner/emacs-doom-themes@8a5538e -> hlissner/emacs-doom-themes@24023de
  - :ui fill-column
    laishulu/hl-fill-column@43cb3c3 -> laishulu/hl-fill-column@5782a91
  - :ui hl-todo
    tarsius/hl-todo@3bba459 -> tarsius/hl-todo@0598b98
  - :ui hydra
    abo-abo/hydra@87873d7 -> abo-abo/hydra@112e689
  - :ui indent-guides
    DarthFennec/highlight-indent-guides@1b12c7b -> DarthFennec/highlight-indent-guides@a4f7714
  - :ui modeline
    seagle0128/doom-modeline@881e099 -> seagle0128/doom-modeline@ffbaaee
  - :ui tabs
    ema2159/centaur-tabs@9114ef4 -> ema2159/centaur-tabs@7e0332b
  - :ui treemacs
    Alexander-Miller/treemacs@644e940 -> Alexander-Miller/treemacs@027e03b
  - :ui window-select
    abo-abo/ace-window@7003c88 -> abo-abo/ace-window@c7cb315
2020-08-19 16:18:11 -04:00
..
autoload Fix fix for #3731 2020-08-11 19:22:32 -04:00
+eclim.el Refactor localleader keybinds #1270 2019-10-04 22:04:47 -04:00
+lsp.el Fix fix for #3731 2020-08-11 19:22:32 -04:00
+meghanada.el Fix references to :tools fly{spell,check} 2020-01-14 03:04:26 -05:00
config.el Fix typo: Groovy_SDK -> Groovy_JDK 2020-05-07 01:19:57 +09:00
doctor.el Add :tools lsp checks for +lsp flag 2019-04-24 18:16:05 -04:00
packages.el Bump * 2020-08-19 16:18:11 -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.