Test-Source-Folder ohne eigenen Output-Ordner — Testklassen landen in target/classes #84

Closed
opened 2026-09-07 16:23:09 +00:00 by hauschel.fred · 0 comments
Collaborator

Symptom

Beim Maven-Import erzeugt ProjectImporter eine .classpath, in der src/main/java und src/test/java beide ohne output-Attribut angelegt sind; einziger Output ist target/classes. Eclipse kompiliert die Testklassen dorthin (arknet: 17 in arknet-shared-kernel, 56 in arknet-mcp). Ein anschließendes mvn package ohne clean packt sie ins Jar (arknet-shared-kernel-0.9.0-SNAPSHOT.jar enthielt 11 Testklassen).

Das ist die Ursache der seit Juli 2026 bekannten "Unresolved compilation problems" in fremden Modulen, sobald jdt-mcp mit dem Workspace verbunden ist.

Ursache

ProjectImporter.addSourceFolderIfExists() ruft JavaCore.newSourceEntry(path) ohne Output-Location auf — für alle vier Folder gleich. Danach wird setOutputLocation(target/classes) als einziger Output gesetzt.

Erwartung

Wie bei m2e: src/test/java und src/test/resources mit output="target/test-classes" (JavaCore.newSourceEntry(path, exclusions, outputLocation)), main-Folder mit target/classes. Gleiches Muster für Gradle (build/classes/java/main / build/classes/java/test).

Zu prüfen: ExecutionTools baut den Runtime-Classpath aus getOutputLocation() und den Source-Entries — der Test-Output muss dort mit aufgenommen werden.

Gefunden

Test gegen arknet (27 Module, Java 25, JUnit 6.1.1) am 2026-09-07, Server 1.0.0.202604101442.

## Symptom Beim Maven-Import erzeugt `ProjectImporter` eine `.classpath`, in der `src/main/java` und `src/test/java` beide ohne `output`-Attribut angelegt sind; einziger Output ist `target/classes`. Eclipse kompiliert die Testklassen dorthin (arknet: 17 in `arknet-shared-kernel`, 56 in `arknet-mcp`). Ein anschließendes `mvn package` ohne `clean` packt sie ins Jar (`arknet-shared-kernel-0.9.0-SNAPSHOT.jar` enthielt 11 Testklassen). Das ist die Ursache der seit Juli 2026 bekannten "Unresolved compilation problems" in fremden Modulen, sobald jdt-mcp mit dem Workspace verbunden ist. ## Ursache `ProjectImporter.addSourceFolderIfExists()` ruft `JavaCore.newSourceEntry(path)` ohne Output-Location auf — für alle vier Folder gleich. Danach wird `setOutputLocation(target/classes)` als einziger Output gesetzt. ## Erwartung Wie bei m2e: `src/test/java` und `src/test/resources` mit `output="target/test-classes"` (`JavaCore.newSourceEntry(path, exclusions, outputLocation)`), main-Folder mit `target/classes`. Gleiches Muster für Gradle (`build/classes/java/main` / `build/classes/java/test`). Zu prüfen: `ExecutionTools` baut den Runtime-Classpath aus `getOutputLocation()` und den Source-Entries — der Test-Output muss dort mit aufgenommen werden. ## Gefunden Test gegen arknet (27 Module, Java 25, JUnit 6.1.1) am 2026-09-07, Server 1.0.0.202604101442.
fred closed this issue 2026-09-07 18:39:54 +00:00
Commenting is not possible because the repository is archived.
No project
No assignees
1 participant
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#84
No description provided.