# Java contribution layer for Spacemacs
## Description
This layer adds support for the Java language using the [Eclim](http://eclim.org)
client/server.
## Layer Installation
**Table of Contents**
- [Java contribution layer for Spacemacs](#java-contribution-layer-for-spacemacs)
- [Description](#description)
- [Layer Installation](#layer-installation)
- [Eclim](#eclim)
- [Installation](#installation)
- [Usage](#usage)
- [Key bindings](#key-bindings)
- [Eclim key bindings in java-mode](#eclim-key-bindings-in-java-mode)
- [Project management](#project-management)
- [Maven](#maven)
- [Goto](#goto)
- [Refactoring](#refactoring)
- [Documentation, Find](#documentation-find)
- [Problems](#problems)
- [Tests](#tests)
- [Eclim keybindings in problems buffer](#eclim-keybindings-in-problems-buffer)
- [Eclim keybindings in projects buffer](#eclim-keybindings-in-projects-buffer)
Add this layer to your `~/.spacemacs`.
```elisp
(setq-default dotspacemacs-configuration-layers '(java))
```
and also in `~/.spacemacs` set eclipse and eclim paths:
```elisp
(custom-set-variables
'(eclim-eclipse-dirs '("~/opt/eclipse"))
'(eclim-executable "~/opt/eclipse/eclim"))
```
## Eclim
[Eclim]() provides the ability to access Eclipse code editing features (code completion, searching, code validation, and many more) via the command line or a local network connection, allowing those features to be integrated with your favorite editor.
### Installation
For installation check [official page](http://eclim.org/install.html#download)
### Usage
Currently you have to have eclimd already started. This layer doesn't try to control eclimd in no way although there's that option in `emacs-eclim` itself.
This layer uses `company` as a completion framework. If you want to use `auto-complete` I encourage you to make it configurable.
## Key bindings
### Eclim key bindings in java-mode
#### Project management
Key Binding | Description
----------------------|------------------------------------------------------------
SPC m p j | Information about project
SPC m p o | Open project
SPC m p b | Build project
SPC m p d | Delete project
SPC m p g | Open file in current project
SPC m p i | Import project
SPC m p c | Create project
SPC m p k | Close project
SPC m p s | Open project management buffer
SPC m p u | Update project
#### Maven
Key Binding | Description
----------------------|------------------------------------------------------------
SPC m m p | Run one already goal from list
SPC m m R | Run one maven goal
SPC m m r | Run maven goals
SPC m m t | Run maven test
SPC m m i | Run maven clean install
SPC m m I | Run maven install
#### Goto
Key Binding | Description
----------------------|------------------------------------------------------------
SPC m g g or M-. | go to declaration
M-, | jump back from go to declaration/definition
SPC m g t | go to type definition
#### Refactoring
Key Binding | Description
----------------------|------------------------------------------------------------
SPC m r f | Format file
SPC m r r | Rename symbol
SPC m r i | optimize imports
#### Documentation, Find
Key Binding | Description
----------------------|------------------------------------------------------------
SPC m h h | show documentation for symbol at point
SPC m h u | show usages for symbol at point
SPC m f f | general find in project
#### Problems
Key Binding | Description
----------------------|------------------------------------------------------------
SPC m e o | open buffer with problems
SPC m e b | open buffer with problems
SPC m e a | set all problems for next/prev action
SPC m e e | set only errors for next/prev action
SPC m e w | set warnings for next/prev action
SPC m e f | set only current file for next/prev action
SPC m e n | set all problems for next/prev action
SPC m e n | go to next problem
SPC m e p | go to previous problem
SPC m e c | show options with problem corrections
#### Tests
Key Binding | Description
----------------------|------------------------------------------------------------
SPC m t t | run JUnit tests for current method or current file or project
SPC m t T | run maven test phase
### Eclim keybindings in problems buffer
Key Binding | Description
----------------------|------------------------------------------------------------
a | show all problems
e | show only errors
g | refresh problems
q | quit
w | show only warnings
f | show problems only for current file
RET | go to problem place
### Eclim keybindings in projects buffer
Key Binding | Description
----------------------|------------------------------------------------------------
N | create new project
m | mark current project
M | mark all projects
u | unmark current project
U | unmark all projects
o | open project
c | go to problem place
i | info about current project
I | import existing project into the workspace
RET | go to current project
D | delete project
p | update project
g | refresh buffer
R | rename current project
q | quit