{"id":44197515,"url":"https://github.com/alessio-vivaldelli/java-creator-nvim","last_synced_at":"2026-02-10T22:01:12.166Z","repository":{"id":337076732,"uuid":"1037395056","full_name":"alessio-vivaldelli/java-creator-nvim","owner":"alessio-vivaldelli","description":"Neovim plugin for generating Java files (classes, interfaces, enums, records) with package-aware autocompletion.","archived":false,"fork":false,"pushed_at":"2026-02-07T16:08:57.000Z","size":1141,"stargazers_count":17,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-08T00:49:19.515Z","etag":null,"topics":["java","nvim","plugin"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alessio-vivaldelli.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-13T14:04:55.000Z","updated_at":"2026-02-07T20:03:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/alessio-vivaldelli/java-creator-nvim","commit_stats":null,"previous_names":["alessio-vivaldelli/java-creator-nvim"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/alessio-vivaldelli/java-creator-nvim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alessio-vivaldelli%2Fjava-creator-nvim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alessio-vivaldelli%2Fjava-creator-nvim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alessio-vivaldelli%2Fjava-creator-nvim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alessio-vivaldelli%2Fjava-creator-nvim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alessio-vivaldelli","download_url":"https://codeload.github.com/alessio-vivaldelli/java-creator-nvim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alessio-vivaldelli%2Fjava-creator-nvim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29319237,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-10T20:44:44.282Z","status":"ssl_error","status_checked_at":"2026-02-10T20:44:43.393Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","nvim","plugin"],"created_at":"2026-02-09T20:00:24.065Z","updated_at":"2026-02-10T22:01:12.150Z","avatar_url":"https://github.com/alessio-vivaldelli.png","language":"Lua","readme":"# java-creator.nvim\n\n\u003c!--toc:start--\u003e\n- [java-creator.nvim](#java-creatornvim)\n  - [Features](#features)\n  - [Demo](#demo)\n    - [Create new class inside an existing package](#create-new-class-inside-an-existing-package)\n    - [Create new class inside a new package](#create-new-class-inside-a-new-package)\n  - [Installation](#installation)\n  - [Usage](#usage)\n    - [Basic Commands](#basic-commands)\n  - [Configuration](#configuration)\n\u003c!--toc:end--\u003e\n\nThis plugin was created to help generate Java class files like in different IDEs, in an interactive way that allows you to choose which package to place it in and to create a new one if needed. When creating the file, it automatically sets the file's package so you don't have to do it manually.\n\n## Features\n\n- Supports:\n  - Classes\n  - Interfaces\n  - Enums\n  - Records (Java 16+)\n  - Abstract classes\n- Automatic package detection\n- Check file/package name validity\n\n## Demo\n\n### Create new class inside an existing package\n\n![New class](./res/new-class.gif)\n\n### Create new class inside a new package\n\n![New package](./res/new-package.gif)\n\n## Installation\n\nUsing [Lazy.nvim](https://github.com/folke/lazy.nvim), with basic configuration:\n\n```lua\n{\n  'alessio-vivaldelli/java-creator-nvim',\n  ft = 'java',\n  opts = {\n    -- Default configuration\n    keymaps = {\n      java_new = \"\u003cleader\u003ejn\",\n    },\n    options = {\n      auto_open = true,  -- Open file after creation\n      java_version = 17  -- Minimum Java version\n    }\n  }\n}\n```\n\nSuggested configuration is:\n\n```lua\n{\n  {\n    \"alessio-vivaldelli/java-creator-nvim\",\n    config = function()\n      require(\"java-creator-nvim\").setup({\n        options = {\n          java_version = 17,\n          auto_open = true,\n          use_notify = true,\n          custom_src_path = \"backend/src/main/java\",\n          src_patterns = { \"src/main/java\", \"src/test/java\", \"src\" },\n          project_markers = { \"pom.xml\", \"build.gradle\", \"build.gradle.kts\", \"settings.gradle\", \"settings.gradle.kts\", \".project\" },\n          notification_timeout = 3000,\n        },\n        keymaps = {\n          java_new = \"\u003cleader\u003ejn\",\n          java_class = \"\u003cleader\u003ejc\",\n          java_interface = \"\u003cleader\u003eji\",\n          java_enum = \"\u003cleader\u003eje\",\n          java_record = \"\u003cleader\u003ejr\",\n        },\n        default_imports = {\n          record = { \"java.util.*\" }, -- Import di default per i record\n        },\n      })\n\n      vim.keymap.set(\"i\", \"\u003cC-space\u003e\", 'pumvisible() ? \"\\\\\u003cC-n\u003e\" : \"\\\\\u003cC-x\u003e\\\\\u003cC-u\u003e\"', {\n        expr = true,\n        desc = \"\",\n      })\n    end,\n    ft = \"java\",\n    event = \"VeryLazy\",\n    dependencies = {\n      { \"rcarriga/nvim-notify\", optional = true },\n    },\n  },\n}\n```\n\n## Usage\n\n### Basic Commands\n\n```vim\n:JavaNew            \" Interactive creation wizard\n:JavaClass          \" Create a new class\n:JavaInterface      \" Create a new interface  \n:JavaEnum           \" Create a new enum\n:JavaRecord         \" Create a new record (Java 16+)\n:JavaAbstractClass  \" Create a new abstract class\n```\n\nYou can also set keymaps to bind this operation.\n\n## Configuration\n\nAll configuration are:\n\n```lua\n  -- Customize templates for Java types\n  templates = {\n    class = [[package %s;\n\npublic class %s {\n    // TODO: Implement class\n}]],\n    interface = [[package %s;\n\npublic interface %s {\n    // TODO: Implement interface\n}]],\n    enum = [[package %s;\n\npublic enum %s {\n    // TODO: Add enum values\n}]],\n    record = [[package %s;\n\npublic record %s() {\n    // TODO: Add record components\n}]],\n    abstract_class = [[package %s;\n\npublic abstract class %s {\n    // TODO: Implement abstract class\n}]],\n  },\n\n  -- Default imports for each type\n  default_imports = {\n    record = { \"java.util.*\", \"java.io.Serializable\" },\n    class = { \"java.util.*\" },\n  },\n\n  -- Custom key mappings\n  keymaps = {\n    java_new = \"\u003cleader\u003ejn\",              -- Interactive Java file creation\n    java_class = \"\u003cleader\u003ejc\",            -- Create new class\n    java_interface = \"\u003cleader\u003eji\",        -- Create new interface\n    java_enum = \"\u003cleader\u003eje\",             -- Create new enum\n    java_record = \"\u003cleader\u003ejr\",           -- Create new record\n    java_abstract_class = \"\u003cleader\u003eja\",   -- Create new abstract class\n  },\n\n  -- General options\n  options = {\n    auto_open = true,             -- Automatically open created file\n    use_notify = true,           -- Use notifications (nvim-notify if available)\n    notification_timeout = 3000, -- Notification timeout in milliseconds\n    java_version = 17,           -- Target Java version\n    src_patterns = {             -- Patterns to find source directories\n      \"src/main/java\", \n      \"src/test/java\", \n      \"src\"\n    },\n    project_markers = {          -- Files that identify a Java project\n      \"pom.xml\", \n      \"build.gradle\",\n      \"build.gradle.kts\",\n      \"settings.gradle\",\n      \"settings.gradle.kts\",\n      \".project\"\n    },\n    custom_src_path = nil,       -- Custom source path (optional)\n```\n\n- **Templates**: Customize the initial content for different Java file types.\n- **Default Imports**: Specify automatic imports for each file type.\n- **Keymaps**: Customize keyboard shortcuts for quick file creation.\n- **Options**:\n  - `auto_open`: If true, automatically opens the created file.\n  - `use_notify`: Shows notifications using nvim-notify or falls back to vim.notify.\n  - `java_version`: Sets the target Java version (affects feature availability like records).\n  - `src_patterns`: Directories where Java source files are searched.\n  - `project_markers`: Files/directories that identify a Java project root.\n","funding_links":[],"categories":["Programming Languages Support"],"sub_categories":["Diagnostics"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falessio-vivaldelli%2Fjava-creator-nvim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falessio-vivaldelli%2Fjava-creator-nvim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falessio-vivaldelli%2Fjava-creator-nvim/lists"}