[[!meta title="How Emacs became my awesome Java editing environment - Torstein Krause Johansen"]]
[[!meta copyright="Copyright © 2019 Torstein Krause Johansen"]]

[[!template  id=vid
src="https://mirror.csclub.uwaterloo.ca/emacsconf/2019/emacsconf-2019-19-how-emacs-became-my-awesome-java-environment--skybert.webm"
type="video/webm"]]

### Download

- [Video (Live)](https://mirror.csclub.uwaterloo.ca/emacsconf/2019/emacsconf-2019-19-how-emacs-became-my-awesome-java-environment--skybert.webm) (720p)
- [Video (Prerecording)](https://mirror.csclub.uwaterloo.ca/emacsconf/2019/emacsconf-2019-19-how-emacs-became-my-awesome-java-environment--prerec--skybert.webm) (1080p)

### Notes

#### Emacs: My awesome Java environment

by torstein @ skybert dot net

#### Hi, I'm Torstein 👋
- Been in ❤ with Emacs since 2000

#### I've used many Java plugins/packages

- java-mode (2000 → 2001)
- [JDEE](//github.com/jdee-emacs/jdee)  (2001 → 2009)
- [gtags](//www.gnu.org/software/global/manual/global.html)
- jtags
- [Malabar](//github.com/m0smith/malabar-mode) (2011 → 2012)
- [JDIbug](//github.com/udalrich/jdibug)    (2009 → 2011)
- [eclim](//github.com/emacs-eclim/emacs-eclim)     (2013 → 2017)
- [Meghanada](//github.com/mopemope/meghanada-emacs) (2017 → 2018)
- [lsp-java](//github.com/emacs-lsp/lsp-java)  (2018 → present)

#### My requirements
- Zero conf: Easily setup a new Java project
- Fast: must handle large projects
- Large meaning ~7000 classes (Tomcat has 2200)
- Easy to switch between projects

#### Seeing is believing

Will use a wee app, [cheese-shop](//gitlab.com/skybert/cheese-shop) to
show the Java features in Emacs.

- Auto completion
- Code navigation
- Jump to source of 3rd party libraries
- Import classes
- Static import methods and fields
- Run JUnit tests from within Emacs
- Linting
- Unused variables
- Wrong syntax
- Missing generics
- Implement missing class
- Implement missing method
- Debug application from within Emacs
- Debugger with conditional break points
- Refactoring: rename variable
- Refactoring: extract to variable
- Refactoring: extract to method