2020-04-29 06:05:13 +02:00
#+TITLE : lang/java
#+DATE : January 16, 2017
#+SINCE : v1.3
#+STARTUP : inlineimages
* Table of Contents :TOC_3:noexport:
- [[#description ][Description ]]
- [[#module-flags ][Module Flags ]]
- [[#prerequisites ][Prerequisites ]]
- [[#openjdk-11 ][OpenJDK 11 ]]
- [[#ubuntu ][Ubuntu ]]
- [[#fedora ][Fedora ]]
- [[#oracle-jdk-11 ][Oracle JDK 11 ]]
- [[#ubuntu-1 ][Ubuntu ]]
- [[#fedora-1 ][Fedora ]]
2020-05-08 10:54:54 +01:00
- [[#multiple-java-versions ][Multiple Java Versions ]]
2020-04-29 06:05:13 +02:00
- [[#features ][Features ]]
- [[#lsp-features ][=+lsp= features ]]
- [[#meghanada-features ][=+meghanada= features ]]
- [[#configuration ][Configuration ]]
2020-05-08 10:54:54 +01:00
- [[#lsp ][=+lsp= ]]
2020-04-29 06:05:13 +02:00
* Description
This module adds [[https://www.java.com ][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 [[https://github.com/mopemope/meghanada-emacs/tree/master ][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.
2020-05-08 10:54:54 +01:00
The =lsp= test runner requires that =:tools (debugger +lsp)= is enabled, as this
provides =dap-mode= which contains the Java test runner.
2020-04-29 06:05:13 +02:00
* Prerequisites
This module requires the Java SDK.
** OpenJDK 11
*** Ubuntu
#+BEGIN_SRC sh
sudo apt-get install openjdk-11-jdk-headless
#+END_SRC
*** Fedora
#+BEGIN_SRC sh
sudo dnf install java-11-openjdk
#+END_SRC
** Oracle JDK 11
*** Ubuntu
#+BEGIN_SRC sh
sudo add-apt-repository ppa:linuxuprising/java
sudo apt update
sudo apt install oracle-java11-installer
sudo apt install oracle-java11-set-default
#+END_SRC
*** Fedora
#+BEGIN_SRC sh
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/
#+END_SRC
Open =/etc/profile.d/jdk11.sh= as root and add
#+BEGIN_SRC sh
export JAVA_HOME=/usr/local/jdk-11.0.2
export PATH=$PATH:$JAVA_HOME/bin
#+END_SRC
Save the file and source the file
#+BEGIN_SRC sh
source /etc/profile.d/jdk11.sh
java -version
#+END_SRC
2020-05-08 10:54:54 +01:00
** Multiple Java Versions
It is common to need support for multiple Java versions. You can use a generic
tool like [[https://github.com/shyiko/jabba ][jabba ]] to install and manage multiple Java versions on any OS.
To switch between Java versions in Doom, you can use [[https://github.com/direnv/direnv ][direnv ]] and the [[file:~/.emacs.d/modules/tools/direnv/README.org::+TITLE: tools/direnv ][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:
#+BEGIN_SRC conf-unix
PATH_add ~/.jabba/jdk/adopt@1.11.0-3
JAVA_HOME=~/.jabba/jdk/adopt@1.11.0-3
#+END_SRC
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.
2020-04-29 06:05:13 +02:00
* 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/[[https:/ /github.com/emacs-lsp/lsp-ui][lsp-ui]])
+ Code completion - using [[https://github.com/tigersoldier/company-lsp ][company-lsp ]] or builtin complete-at-point
+ Javadoc hovers - using [[https://github.com/emacs-lsp/lsp-ui ][lsp-ui ]]
+ Code actions - using [[https://github.com/emacs-lsp/lsp-ui ][lsp-ui ]]
+ Code outline - using builtin [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Imenu.html ][imenu ]]
+ Code navigation - using builtin [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Xref.html ][xref ]]
+ Code lens (references/implementations) - using builtin [[https:/ /www.gnu.org/software/emacs/manual/html_node/emacs/Xref.html][xref]]
+ Highlights
+ Code formatting
+ Maven pom.xml project support
+ Limited Gradle support
+ Visual debugger - [[https://github.com/yyoncho/dap-mode/ ][dap-mode ]]
+ Test runner - [[https://github.com/yyoncho/dap-mode/ ][dap-mode ]]
+ Project explorer integration - [[https://github.com/Alexander-Miller/treemacs ][treemacs ]]
+ Integration with [[https://start.spring.io/ ][Spring Initializr ]]
** =+meghanada= features
According to [[https://github.com/mopemope/meghanada-emacs/ ]] it adds
+ Auto-update server module
+ [[https://gradle.org/ ][Gradle ]] and [[http://maven.apache.org/ ][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 [[http://company-mode.github.io/ ][company-mode ]] (=company-meghanada= )
+ Optimize import and sort
+ Jump declaration
+ Run [[http://www.junit.org/ ][JUnit ]] test (include test runner)
+ Diagnostic reporting with [[http://flycheck.org/ ][flycheck ]] (=flycheck-meghanada= )
+ Show symbol's type info with =el-doc=
+ Search references
+ Full-featured text search
2020-05-08 10:54:54 +01:00
* 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.