Eclipse JUnit-Runner inkompatibel mit JUnit Platform 1.x #71

Closed
opened 2026-03-09 05:48:24 +00:00 by hauschel.fred · 3 comments
Collaborator

Problem

jdt_run_tests und jdt_start_tests_async scheitern mit:

NoClassDefFoundError: org/junit/platform/engine/OutputDirectoryCreator

Die Klasse OutputDirectoryCreator existiert erst in JUnit Platform 6.x. Projekte mit JUnit 5.11.4 (Platform 1.11.4) sind betroffen.

Reproduktion

  1. Fixture-Projekt mit JUnit 5.11.4 importieren
  2. jdt_run_tests(projectName="fixture-core", className="SimpleProcessorTest") ausführen
  3. NoClassDefFoundError

Workaround

jdt_maven_build mit goals="test" funktioniert.

Mögliche Fixes

  • Eclipse JDT JUnit-Runner-JARs auf eine Version downgraden, die mit JUnit Platform 1.x kompatibel ist
  • Oder: JUnit Platform Version aus dem Projekt-Classpath erkennen und passenden Runner wählen

Kontext

Gefunden im Test-Report v0.2.18 (Tests J4, J5).

## Problem `jdt_run_tests` und `jdt_start_tests_async` scheitern mit: ``` NoClassDefFoundError: org/junit/platform/engine/OutputDirectoryCreator ``` Die Klasse `OutputDirectoryCreator` existiert erst in JUnit Platform 6.x. Projekte mit JUnit 5.11.4 (Platform 1.11.4) sind betroffen. ## Reproduktion 1. Fixture-Projekt mit JUnit 5.11.4 importieren 2. `jdt_run_tests(projectName="fixture-core", className="SimpleProcessorTest")` ausführen 3. → `NoClassDefFoundError` ## Workaround `jdt_maven_build` mit `goals="test"` funktioniert. ## Mögliche Fixes - Eclipse JDT JUnit-Runner-JARs auf eine Version downgraden, die mit JUnit Platform 1.x kompatibel ist - Oder: JUnit Platform Version aus dem Projekt-Classpath erkennen und passenden Runner wählen ## Kontext Gefunden im Test-Report v0.2.18 (Tests J4, J5).
Author
Collaborator

Triage 2026-09-07: Ursache verifiziert, #78 hierher zusammengelegt

#78 (NoSuchMethodError: CollectionUtils.forEachInReverseOrder) ist dasselbe Problem mit umgekehrtem Vorzeichen: Dort ist die Projekt-Platform neuer als erwartet, hier älter. Beide Symptome haben eine Ursache:

ExecutionTools setzt TEST_KIND fest auf org.eclipse.jdt.junit.loader.junit5 (ExecutionTools.java:822 und :1488). JDT prüft in CoreTestSearchEngine.hasJUnitJupiterTestAnnotation die Platform-Version aus dem Jar-Namen junit-platform-commons-<v>.jar (Fallback: Manifest Specification-Version) und erwartet:

TEST_KIND erwartete Platform-Major
org.eclipse.jdt.junit.loader.junit5 1.x
org.eclipse.jdt.junit.loader.junit6 (in Eclipse 2025-12 vorhanden) 6.x

Fix: Vor dem Launch die Platform-Version aus dem Projekt-Classpath lesen und den passenden Loader-Kind wählen. Verifiziert am 2026-09-07 gegen arknet (JUnit 6.1.1, Java 25).

Hochgestuft auf P2: jdt_run_tests ist damit für jedes Projekt außerhalb des exakt passenden Platform-Majors unbenutzbar, Workaround bleibt jdt_maven_build(goals="test").

## Triage 2026-09-07: Ursache verifiziert, #78 hierher zusammengelegt #78 (`NoSuchMethodError: CollectionUtils.forEachInReverseOrder`) ist dasselbe Problem mit umgekehrtem Vorzeichen: Dort ist die Projekt-Platform neuer als erwartet, hier älter. Beide Symptome haben eine Ursache: `ExecutionTools` setzt `TEST_KIND` fest auf `org.eclipse.jdt.junit.loader.junit5` (`ExecutionTools.java:822` und `:1488`). JDT prüft in `CoreTestSearchEngine.hasJUnitJupiterTestAnnotation` die Platform-Version aus dem Jar-Namen `junit-platform-commons-<v>.jar` (Fallback: Manifest `Specification-Version`) und erwartet: | TEST_KIND | erwartete Platform-Major | |---|---| | `org.eclipse.jdt.junit.loader.junit5` | 1.x | | `org.eclipse.jdt.junit.loader.junit6` (in Eclipse 2025-12 vorhanden) | 6.x | **Fix:** Vor dem Launch die Platform-Version aus dem Projekt-Classpath lesen und den passenden Loader-Kind wählen. Verifiziert am 2026-09-07 gegen arknet (JUnit 6.1.1, Java 25). Hochgestuft auf P2: `jdt_run_tests` ist damit für jedes Projekt außerhalb des exakt passenden Platform-Majors unbenutzbar, Workaround bleibt `jdt_maven_build(goals="test")`.
Author
Collaborator

Ergänzung: Parallel ist #85 entstanden, das denselben Mechanismus vom Precheck her beschreibt (Platform 6.x scheitert schon an hasJUnitJupiterTestAnnotation, bevor der Loader überhaupt startet). Arbeitsteilung:

  • #85 ist das Umsetzungs-Issue: Loader-Kind nach Platform-Major wählen (junit5 für 1.x, junit6 für 6.x, junit4 als Fallback).
  • #71 bleibt offen als Verifikationsfall für Platform 1.x: Nach dem Fix aus #85 muss geprüft werden, ob der gebündelte org.eclipse.jdt.junit5.runtime in Eclipse 2025-12 mit Platform 1.11 überhaupt noch lauffähig ist (OutputDirectoryCreator fehlt dort). Falls nicht, braucht 1.x-Projekte einen eigenen Weg.
Ergänzung: Parallel ist #85 entstanden, das denselben Mechanismus vom Precheck her beschreibt (Platform 6.x scheitert schon an `hasJUnitJupiterTestAnnotation`, bevor der Loader überhaupt startet). Arbeitsteilung: - **#85** ist das Umsetzungs-Issue: Loader-Kind nach Platform-Major wählen (`junit5` für 1.x, `junit6` für 6.x, `junit4` als Fallback). - **#71** bleibt offen als Verifikationsfall für Platform 1.x: Nach dem Fix aus #85 muss geprüft werden, ob der gebündelte `org.eclipse.jdt.junit5.runtime` in Eclipse 2025-12 mit Platform 1.11 überhaupt noch lauffähig ist (`OutputDirectoryCreator` fehlt dort). Falls nicht, braucht 1.x-Projekte einen eigenen Weg.
Author
Collaborator

Entscheidung: geschlossen, JUnit 6 empfohlen.

PR #93 erkennt den Test-Kind jetzt am Classpath (junit4/junit5/junit6). Gegen JUnit Platform 1.11 (fixture-core, JUnit 5.11.4) wirft das gebündelte org.eclipse.jdt.junit5.runtime 1.2.0 NoClassDefFoundError: org/junit/platform/engine/OutputDirectoryCreator — eine Inkompatibilität des Eclipse-Bundles, kein Erkennungsfehler. Ein eigener Runner lohnt für diesen Fall nicht; jdt_run_tests liefert seit #93 eine klare Fehlermeldung, die Einschränkung steht in der README unter „Bekannte Einschränkungen". Projekte auf JUnit Platform 1.x bitte auf JUnit 6 heben.

Entscheidung: geschlossen, JUnit 6 empfohlen. PR #93 erkennt den Test-Kind jetzt am Classpath (junit4/junit5/junit6). Gegen JUnit Platform 1.11 (fixture-core, JUnit 5.11.4) wirft das gebündelte `org.eclipse.jdt.junit5.runtime` 1.2.0 `NoClassDefFoundError: org/junit/platform/engine/OutputDirectoryCreator` — eine Inkompatibilität des Eclipse-Bundles, kein Erkennungsfehler. Ein eigener Runner lohnt für diesen Fall nicht; `jdt_run_tests` liefert seit #93 eine klare Fehlermeldung, die Einschränkung steht in der README unter „Bekannte Einschränkungen". Projekte auf JUnit Platform 1.x bitte auf JUnit 6 heben.
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#71
No description provided.