Skip to content

Latest commit

 

History

History
148 lines (124 loc) · 5.36 KB

README.org

File metadata and controls

148 lines (124 loc) · 5.36 KB

lang/java

Table of Contents

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/[email protected]
JAVA_HOME=~/.jabba/jdk/[email protected]

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.