Lombok-Support: -javaagent automatisch erkennen und laden #74

Closed
opened 2026-03-09 09:22:26 +00:00 by automation · 0 comments
Collaborator

Problem

Der JDT-MCP-Server kann Lombok-Annotationen nicht auflösen. Projekte mit Lombok zeigen hunderte Phantom-Compile-Errors, obwohl der Code mit Maven korrekt kompiliert.

Dies führt dazu, dass Preview-Refactorings funktionieren, aber die tatsächliche Ausführung mit einer AssertionFailedException in TextFileChange.releaseDocument() fehlschlägt.

Typische Phantom-Errors

  • log cannot be resolved (von @Slf4j)
  • The blank final field X may not have been initialized (von @RequiredArgsConstructor)
  • The constructor X() is undefined (von @RequiredArgsConstructor)
  • The method getX() is undefined (von @Data/@Getter)

Stacktrace bei Refactoring-Ausführung

org.eclipse.core.runtime.AssertionFailedException: assertion failed:
  at org.eclipse.core.runtime.Assert.isTrue(Assert.java:121)
  at org.eclipse.ltk.core.refactoring.TextFileChange.releaseDocument(TextFileChange.java:252)
  at org.eclipse.jdt.core.refactoring.CompilationUnitChange.releaseDocument(CompilationUnitChange.java:92)
  at org.eclipse.ltk.core.refactoring.TextChange.perform(TextChange.java:249)

Ursache

JDT benötigt den Lombok-Agent als -javaagent in der JVM, um Lombok-generierte Methoden/Felder im AST sichtbar zu machen.

Lösung

1. Auto-Detection im Launcher-Script

  • Beim Start pom.xml/build.gradle nach Lombok-Dependency scannen
  • Lombok-JAR in ~/.m2/repository/org/projectlombok/lombok/ finden
  • Automatisch -javaagent:<path>/lombok.jar zur JVM hinzufügen

2. Manuelle Konfiguration über ~/.jdt-mcp/jdt-mcp.ini

  • Eine JVM-Option pro Zeile (z.B. -javaagent:/path/to/lombok.jar)
  • Kommentare mit #
  • Allgemeiner Mechanismus für beliebige VM-Args

3. Runtime-Warnung

  • ProjectImporter erkennt Lombok in den Dependencies
  • Warnung wenn Lombok erkannt aber Agent nicht geladen

4. Environment Variable JDTMCP_VMARGS

  • Zusätzliche VM-Args über Umgebungsvariable

Umgebung

  • JDT-MCP-Server: 0.2.18
  • Lombok: 1.18.40
  • Java: 25
## Problem Der JDT-MCP-Server kann Lombok-Annotationen nicht auflösen. Projekte mit Lombok zeigen hunderte Phantom-Compile-Errors, obwohl der Code mit Maven korrekt kompiliert. Dies führt dazu, dass Preview-Refactorings funktionieren, aber die tatsächliche Ausführung mit einer `AssertionFailedException` in `TextFileChange.releaseDocument()` fehlschlägt. ### Typische Phantom-Errors - `log cannot be resolved` (von `@Slf4j`) - `The blank final field X may not have been initialized` (von `@RequiredArgsConstructor`) - `The constructor X() is undefined` (von `@RequiredArgsConstructor`) - `The method getX() is undefined` (von `@Data`/`@Getter`) ### Stacktrace bei Refactoring-Ausführung ``` org.eclipse.core.runtime.AssertionFailedException: assertion failed: at org.eclipse.core.runtime.Assert.isTrue(Assert.java:121) at org.eclipse.ltk.core.refactoring.TextFileChange.releaseDocument(TextFileChange.java:252) at org.eclipse.jdt.core.refactoring.CompilationUnitChange.releaseDocument(CompilationUnitChange.java:92) at org.eclipse.ltk.core.refactoring.TextChange.perform(TextChange.java:249) ``` ## Ursache JDT benötigt den Lombok-Agent als `-javaagent` in der JVM, um Lombok-generierte Methoden/Felder im AST sichtbar zu machen. ## Lösung ### 1. Auto-Detection im Launcher-Script - Beim Start `pom.xml`/`build.gradle` nach Lombok-Dependency scannen - Lombok-JAR in `~/.m2/repository/org/projectlombok/lombok/` finden - Automatisch `-javaagent:<path>/lombok.jar` zur JVM hinzufügen ### 2. Manuelle Konfiguration über `~/.jdt-mcp/jdt-mcp.ini` - Eine JVM-Option pro Zeile (z.B. `-javaagent:/path/to/lombok.jar`) - Kommentare mit `#` - Allgemeiner Mechanismus für beliebige VM-Args ### 3. Runtime-Warnung - ProjectImporter erkennt Lombok in den Dependencies - Warnung wenn Lombok erkannt aber Agent nicht geladen ### 4. Environment Variable `JDTMCP_VMARGS` - Zusätzliche VM-Args über Umgebungsvariable ## Umgebung - JDT-MCP-Server: 0.2.18 - Lombok: 1.18.40 - Java: 25
fred closed this issue 2026-03-09 09:26:23 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ai-tools/jdt-mcp-server#74
No description provided.