GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com β€” GitHub - bryan-yeo/nvim-java: Painless Java in Neovim

BranchesTags
Open more actions menu
 
 

Latest commit

 

History

261 Commits
261 Commits

Folders and files

NameName
Last commit message
Last commit date
.devcontainer
.devcontainer
 
 
.github
.github
 
 
.vscode
.vscode
 
 
dev
dev
 
 
doc
doc
 
 
lua
lua
 
 
plugin
plugin
 
 
tests
tests
 
 
.editorconfig
.editorconfig
 
 
.gitignore
.gitignore
 
 
.luacheckrc
.luacheckrc
 
 
.luarc.json
.luarc.json
 
 
.stylua.toml
.stylua.toml
 
 
CHANGELOG.md
CHANGELOG.md
 
 
CLAUDE.md
CLAUDE.md
 
 
LICENSE
LICENSE
 
 
Makefile
Makefile
 
 
README.md
README.md
 
 
lazy.lua
lazy.lua
 
 

Repository files navigation

β˜• nvim-java

Spring Java Gradle Apache Maven Neovim Lua

Linux Windows macOS


Just install and start writing public static void main(String[] args).


Tip

You can find cool tips & tricks here https://github.com/nvim-java/nvim-java/wiki/Tips-&-Tricks

πŸ“’ Demo

Demo.mp4

πŸ’« Features

  • βœ… Spring Boot Tools
  • βœ… Diagnostics & Auto Completion
  • βœ… Automatic Debug Configuration
  • βœ… Organize Imports & Code Formatting
  • βœ… Running Tests
  • βœ… Run & Debug Profiles
  • βœ… Built-in Application Runner with Log Viewer
  • βœ… Profile Management UI
  • βœ… Decompiler Support
  • βœ… Code Actions

πŸ”¨ How to Install

πŸ”Έdetails

Requirements: Neovim 0.11.5+

Using vim.pack

vim.pack.add({
  {
    src = 'https://github.com/JavaHello/spring-boot.nvim',
    version = '218c0c26c14d99feca778e4d13f5ec3e8b1b60f0',
  },
  'https://github.com/MunifTanjim/nui.nvim',
  'https://github.com/mfussenegger/nvim-dap',

  'https://github.com/nvim-java/nvim-java',
})

require('java').setup()
vim.lsp.enable('jdtls')

Using lazy.nvim

Install using lazy.nvim:

{
  'nvim-java/nvim-java',
  config = function()
    require('java').setup()
    vim.lsp.enable('jdtls')
  end,
}

Yep! That's all :)

⌨️ Commands

πŸ”Έdetails

Build

  • JavaBuildBuildWorkspace - Runs a full workspace build

  • JavaBuildCleanWorkspace - Clear the workspace cache (for now you have to close and reopen to restart the language server after the deletion)

Runner

  • JavaRunnerRunMain - Runs the application or selected main class (if there are multiple main classes)
:JavaRunnerRunMain
:JavaRunnerRunMain <arguments> <to> <pass>
  • JavaRunnerStopMain - Stops the running application
  • JavaRunnerToggleLogs - Toggle between show & hide runner log window

DAP

  • JavaDapConfig - DAP is autoconfigured on start up, but in case you want to force configure it again, you can use this API

Test

  • JavaTestRunCurrentClass - Run the test class in the active buffer
  • JavaTestDebugCurrentClass - Debug the test class in the active buffer
  • JavaTestRunCurrentMethod - Run the test method on the cursor
  • JavaTestDebugCurrentMethod - Debug the test method on the cursor
  • JavaTestViewLastReport - Open the last test report in a popup window

Profiles

  • JavaProfile - Opens the profiles UI

Refactor

  • JavaRefactorExtractVariable - Create a variable from value at cursor/selection
  • JavaRefactorExtractVariableAllOccurrence - Create a variable for all occurrences from value at cursor/selection
  • JavaRefactorExtractConstant - Create a constant from the value at cursor/selection
  • JavaRefactorExtractMethod - Create a method from the value at cursor/selection
  • JavaRefactorExtractField - Create a field from the value at cursor/selection

Settings

  • JavaSettingsChangeRuntime - Change the JDK version to another

πŸ’» APIs

πŸ”Έdetails

Build

  • build.build_workspace - Runs a full workspace build
require('java').build.build_workspace()
  • build.clean_workspace - Clear the workspace cache (for now you have to close and reopen to restart the language server after the deletion)
require('java').build.clean_workspace()

Runner

  • built_in.run_app - Runs the application or selected main class (if there are multiple main classes)
require('java').runner.built_in.run_app({})
require('java').runner.built_in.run_app({'arguments', 'to', 'pass', 'to', 'main'})
  • built_in.stop_app - Stops the running application
require('java').runner.built_in.stop_app()
  • built_in.toggle_logs - Toggle between show & hide runner log window
require('java').runner.built_in.toggle_logs()

DAP

  • config_dap - DAP is autoconfigured on start up, but in case you want to force configure it again, you can use this API
require('java').dap.config_dap()

Test

  • run_current_class - Run the test class in the active buffer
require('java').test.run_current_class()
  • debug_current_class - Debug the test class in the active buffer
require('java').test.debug_current_class()
  • run_current_method - Run the test method on the cursor
require('java').test.run_current_method()
  • debug_current_method - Debug the test method on the cursor
require('java').test.debug_current_method()
  • view_report - Open the last test report in a popup window
require('java').test.view_last_report()

Profiles

require('java').profile.ui()

Refactor

  • extract_variable - Create a variable from value at cursor/selection
require('java').refactor.extract_variable()
  • extract_variable_all_occurrence - Create a variable for all occurrences from value at cursor/selection
require('java').refactor.extract_variable_all_occurrence()
  • extract_constant - Create a constant from the value at cursor/selection
require('java').refactor.extract_constant()
  • extract_method - Create method from the value at cursor/selection
require('java').refactor.extract_method()
  • extract_field - Create a field from the value at cursor/selection
require('java').refactor.extract_field()

Settings

  • change_runtime - Change the JDK version to another
require('java').settings.change_runtime()

πŸ—œοΈ How to Use JDK X.X Version?

πŸ”Έdetails

Use vim.lsp.config() to override the default JDTLS settings:

vim.lsp.config('jdtls', {
  settings = {
    java = {
      configuration = {
        runtimes = {
          {
            name = "JavaSE-21",
            path = "/opt/jdk-21",
            default = true,
          }
        }
      }
    }
  }
})

πŸ”§ Configuration

πŸ”Έdetails

For most users changing the default configuration is not necessary. But if you want, following options are available:

require('java').setup({
  -- Startup checks
  checks = {
    nvim_version = true,        -- Check Neovim version
    nvim_jdtls_conflict = true, -- Check for nvim-jdtls conflict
  },

  -- JDTLS configuration
  jdtls = {
    version = '1.43.0',
  },

  -- Extensions
  lombok = {
    enable = true,
    version = '1.18.40',
  },

  java_test = {
    enable = true,
    version = '0.40.1',
  },

  java_debug_adapter = {
    enable = true,
    version = '0.58.2',
  },

  spring_boot_tools = {
    enable = true,
    version = '1.55.1',
  },

  -- JDK installation
  jdk = {
    auto_install = true,
    version = '17',
  },

  -- Logging
  log = {
    use_console = true,
    use_file = true,
    level = 'info',
    log_file = vim.fn.stdpath('state') .. '/nvim-java.log',
    max_lines = 1000,
    show_location = false,
  },
})

β›³ Architecture

πŸ”Έdetails

Following is the high level idea. Jdtls is the language server nvim-java communicates with. However, we don't have all the features we need just in Jdtls. So, we are loading java-test & java-debug-adapter extensions when we launch Jdtls. Once the language server is started, we communicate with the language server to do stuff.

For instance, to run the current test,

  • Request Jdtls for test classes
  • Request Jdtls for class paths, module paths, java executable
  • Request Jdtls to start a debug session and send the port of the session back
  • Prepare TCP connections to listen to the test results
  • Start nvim-dap and let user interactions to be handled by nvim-dap
  • Parse the test results as they come in
  • Once the execution is done, open a window show the test results
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚            β”‚                         β”‚            β”‚
  β”‚   Neovim   β”‚                         β”‚   VSCode   β”‚
  β”‚            β”‚                         β”‚            β”‚
  β””β”€β”€β”€β”€β”€β–²β”€β”€β”€β”€β”€β”€β”˜                         β””β”€β”€β”€β”€β”€β”€β–²β”€β”€β”€β”€β”€β”˜
        β”‚                                       β”‚
        β”‚                                       β”‚
        β”‚                                       β”‚
        β”‚                                       β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”                β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚               β”‚                β”‚                             β”‚
β”‚   nvim-java   β”‚                β”‚   Extension Pack for Java   β”‚
β”‚               β”‚                β”‚                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β–²β”€β”€β”€β”€β”€β”€β”€β”˜                β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–²β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚                                       β”‚
        β”‚                                       β”‚
        β”‚                                       β”‚
        β”‚                                       β”‚
        β”‚                                       β”‚
        β”‚              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚
        β”‚              β”‚           β”‚            β”‚
        └──────────────►   JDTLS   β—„β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚           β”‚
                       β””β”€β”€β”€β–²β”€β”€β”€β–²β”€β”€β”€β”˜
                           β”‚   β”‚
                           β”‚   β”‚
                           β”‚   β”‚
                           β”‚   β”‚
                           β”‚   β”‚
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”‚   β”‚         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚               β”‚        β”‚   β”‚         β”‚                        β”‚
  β”‚   java-test   β—„β”€β”€β”€β”€β”€β”€β”€β”€β”˜   └─────────►   java-debug-adapter   β”‚
  β”‚               β”‚                      β”‚                        β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“‘ Projects Acknowledgement

  • spring-boot.nvim is the one that starts sts4 & do other necessary jdtls sts4 sync command registration in nvim-java.

  • nvim-jdtls is a plugin that follows "Keep it simple, stupid!" approach. If you love customizing things by yourself, then give nvim-jdtls a try.

About

Painless Java in Neovim

Resources

Readme
License
Activity

Stars

0 stars

Watchers

0 watching

Forks

0 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 β€” GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800Γ—600. No cookies required.