-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
Describe the feature or problem you'd like to solve
Copilot CLI's documentation and intelligence is heavily TypeScript/JavaScript-oriented. The README's LSP section only shows TypeScript examples, with no guidance for Java — one of the most widely used enterprise languages. JVM developers using frameworks like Micronaut, Spring Boot, or Quarkus need the CLI to understand framework-specific conventions to be genuinely useful as an agentic coding assistant.
As a Java architect working with Micronaut microservices and Gradle multi-module builds, I'd like Copilot CLI to have first-class awareness of JVM project structures and framework conventions.
Proposed solution
1. Java LSP configuration example in README
The lsp-config.json section only shows TypeScript. Add a Java example using jdtls (Eclipse JDT Language Server), which is the standard Java LS used by VS Code and other editors:
{
"lspServers": {
"java": {
"command": "jdtls",
"args": ["-data", "/tmp/jdtls-workspace"],
"fileExtensions": {
".java": "java"
}
}
}
}2. Build tool detection
Auto-detect the project's build system and use the correct wrapper/tool:
./gradlew/gradlew.bat→ Gradle wrapper (preferred over systemgradle)mvnw/mvnw.cmd→ Maven wrapper (preferred over systemmvn)build.gradle.kts/build.gradle→ Gradle projectpom.xml→ Maven project
Currently, the agent may run gradle or mvn directly instead of the project-local wrappers, which can use the wrong version or miss project-specific configuration.
3. Framework convention awareness
JVM frameworks are heavily convention and annotation-driven. The CLI should understand:
Micronaut:
@Singleton,@Controller,@Client,@Factory— DI and HTTP patternsapplication.yml/application-{env}.yml— environment-specific config@MicronautTest— test lifecycle
Spring Boot:
@RestController,@Service,@Repository,@Configuration— layered architectureapplication.properties/application-{profile}.yml— profile-based config@SpringBootTest,@WebMvcTest— slice testing
Common JVM patterns:
src/main/java/src/test/java— standard Maven/Gradle layoutsrc/main/resources— config and static resources- Package naming conventions mapping to directory structure
4. Multi-module project navigation
Enterprise Java projects are almost always multi-module. The CLI should:
- Parse
settings.gradle.kts/settings.gradle/ parentpom.xmlto understand module boundaries - Run module-scoped commands:
./gradlew :module-name:testinstead of./gradlew test - Navigate between API and implementation modules
Example prompts or workflows
- "Add a new REST endpoint for /api/v1/rewards with request validation" → generates correct Micronaut/Spring-specific controller code with framework annotations, not generic Java
- "Run the tests for the linking-service module" → executes
./gradlew :linking-service:test(notgradle testor./gradlew test) - "Show me all the HTTP clients in this project" → finds
@Clientannotated interfaces (Micronaut) orRestTemplate/WebClientusages (Spring) - "Add a new configuration property for the retry timeout" → adds to the correct
application.ymlwith framework-appropriate syntax - "Create an integration test for the account service" → uses
@MicronautTestor@SpringBootTestdepending on the framework detected
Additional context
- Java consistently ranks in the top 3 languages on GitHub and is the dominant language in enterprise development
- The JVM ecosystem (Java, Kotlin, Scala) shares build tools (Gradle, Maven) and project conventions
- VS Code Copilot Chat already has some Java awareness via the Java extension pack — parity in the CLI would benefit the large population of terminal-first Java developers
- Kotlin DSL (
build.gradle.kts) is now the default for new Gradle projects and should be understood alongside Groovy DSL