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
Keith Pinson 4e57eaceea
Remove gradle-mode to stop it breaking bindings of other major modes
After using Java mode, Gradle keybindings infect or even clobber keybindings of
any subsequently used major-mode. For example, the critical Agda major mode
keybinding of `l` as `agda2-load` gets with a Gradle menu!

The cause, found by @duianto, is that `emacs-gradle-mode` sets itself to a
[global](e4d665d578/gradle-mode.el (L176-L183))
minor mode. The docs for `define-minor-mode` say about `:global:`

> If non-nil specifies that the minor mode is not meant to be
> buffer-local, so don't make the variable MODE buffer-local.
> By default, the mode is buffer-local.

I don't know why `gradle-mode` is doing this; presumably there is some reason or
need for it. But the author of that package hasn't been on GitHub since 2017,
and the last update of the package itself is from early 2015.

To seal the deal, `gradle-mode` hasn't been working anyway (at least, I've never
got it to work). I've been running Gradle by launching a terminal within Emacs.

Fixes #13750.
2020-07-18 09:30:35 +02:00
..
img
config.el Fix filenames in layer file headers 2020-02-20 00:07:30 +01:00
funcs.el Remove gradle-mode to stop it breaking bindings of other major modes 2020-07-18 09:30:35 +02:00
layers.el
packages.el Remove gradle-mode to stop it breaking bindings of other major modes 2020-07-18 09:30:35 +02:00
README.org Remove gradle-mode to stop it breaking bindings of other major modes 2020-07-18 09:30:35 +02:00

Java layer

/TakeV/spacemacs/media/commit/82b2942cb7a26a26459f82086186d77de716b1dc/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 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