This repository has been archived on 2024-10-22. You can view files and clone it, but cannot push or open issues or pull requests.
spacemacs/layers/+lang/java
Maximilian Wolff 1fd90fc1dc
Update instructions for dap integration and update existing layers
The previous way of adding dap to a layer did add the mode
unconditionally to `spacemacs--dap-supported-modes` causing
dap bindings to be added also when no lsp backend was used.
2020-05-16 23:40:38 +02:00
..
img
config.el Fix filenames in layer file headers 2020-02-20 00:07:30 +01:00
funcs.el Removed company-lsp in favour of company-capf 2020-04-04 08:24:44 +02:00
layers.el [core] Fix layer dependencies based on layer variables 2019-09-30 02:00:48 -04:00
packages.el Update instructions for dap integration and update existing layers 2020-05-16 23:40:38 +02:00
README.org documentation formatting: Fri Nov 8 16:03:53 UTC 2019 2019-11-08 16:08:22 +00:00

Java layer

/TakeV/spacemacs/media/commit/4ad845cc39476be683241579dec25e92e1777805/layers/+lang/java/img/java.png

Description

This layer adds support for the Java language.

Features:

  • Support for the following backends:

  • Auto-completion using company
  • Linting using flycheck integration
  • Maven and Gradle integration
  • Interactive debugger using dap-mode

Layer Installation

Layer

To use this configuration layer, add it to your ~/.spacemacs. You will need to add java to the existing dotspacemacs-configuration-layers list in this file.

Choosing a backend

To choose a default backend set the layer variable java-backend:

  (java :variables java-backend 'meghanada)

Alternatively the lsp backend will be automatically chosen if the layer lsp is used and you did not specify any value for java-backend.

Backend can be chosen on a per project basis using directory local variables (files named .dir-locals.el at the root of a project), an example to use the lsp backend:

  ;;; Directory Local Variables
  ;;; For more information see (info "(emacs) Directory Variables")

  ((java-mode (java-backend . lsp)))

Note: you can easily add a directory local variable with SPC f v d.

Backends

LSP Java

LSP Java is the Java adapter for LSP Mode which is the Emacs client for Language Server Protocol.

It integrates with company and flycheck. In addition it also provides full graphical debugging support via DAP mode.

LSP is the default backend used by this layer, see Choosing a backend in order to lean how to select a different backend.

Installation

The lsp server will be installed automatically whenever a Java file is opened.

Meghanada

Meghanada is composed of a lightweight server and an Emacs minor mode. It is unintrusive and integrates with company and flycheck.

Both Gradle and Maven projects are compatible with Meghanada.

Installation

The Meghanada server will be installed automatically whenever a Java file is opened.

If you get issues with the auto-installation you can either download the last version of the server manually there or build from source hosted on the GitHub repository and copy the jar file to .emacs.d/.cache/meghanada folder.

No additional configuration is necessary!

About Maven

Maven is not fully supported by Meghanada (but should still work fine for most projects). If you encounter disconnection from the server then run mvn install at the root of your project first.

Key bindings

LSP Java

Code completion

Key binding Description
SPC m g g Go to definition
SPC m g r Find references
SPC m g R Peek references using lsp-ui
SPC m g d Goto type definition
SPC m g a Search type in project
SPC m g A Search type in project using lsp-ui
SPC m h h Describe thing at point
SPC m e l List project errors/warnings
SPC m p u Refresh user settings
SPC m e a Execute code action
SPC m q r Restart workspace
SPC m r o i Organize imports
SPC m r r Rename symbol
SPC m r a i Add import
SPC m r a m Add unimplemented methods
SPC m r c p Create parameter
SPC m r c f Create field
SPC m r e c Extract constant
SPC m r e l Extract local
SPC m r e m Extract method
SPC m r c i Convert to static import
SPC m r a t Add throws exception
SPC m r a a Assign all parameters to fields
SPC m r a f Assign parameter to field
SPC m r g g Generate getters/setters
SPC m r g e Generate equals and hashCode methods
SPC m r g t Generate toString method
SPC m r g o Generate method overrides
SPC m c c Build project
SPC m c p Create spring boot project
SPC m a n Actionable notifications
SPC m = Format code

Debugger

Using the dap layer you'll get access to all the DAP key bindings, see the complete list of key bindings on the dap layer description.

Meghanada

Server

Key binding Description
SPC m D c Connect to server
SPC m D d Disconnect from server
SPC m D i Install server (should be done automatically
SPC m D k Kill server
SPC m D l Clear server cache
SPC m D p Ping server
SPC m D r Restart server
SPC m D s Start server
SPC m D u Update server
SPC m D v Print version of the server

Navigation

Key binding Description
SPC m g b Jump back to previous location
SPC m g g Jump to declaration

Compilation

Key binding Description
SPC m c b Compile file (buffer)
SPC m c c Compile project

Tests (junit)

Key binding Description
SPC m t a Run all tests
SPC m t c Run test class around point
SPC m t l Run last tests
SPC m t t Run test cause around point

Refactoring

Key binding Description
SPC m = Beautify code
SPC m r i Optimize imports
SPC m r I Import all
SPC m r n Create a new class, interface, or enum

Tasks

Key binding Description
SPC m x : Run task

Maven

Key binding Description
SPC m m c c Compile
SPC m m c C Clean
SPC m m c r Clean and compile
SPC m m g a Switch between class and test file
SPC m m g A Switch between class and test file in another window
SPC m m t a Run all tests
SPC m m t C-a Clean and run all tests
SPC m m t b Run current buffer tests
SPC m m t i Test and install
SPC m m t t Run a specific test

Gradle

Key binding Description
SPC m l c c Compile
SPC m l c C Clean
SPC m l c r Clean and compile
SPC m l t a Run all tests
SPC m l t b Run current buffer tests
SPC m l t t Run a specific test
SPC m l x Execute a Gradle task