fix: support pre-3.2 Spring Boot JARs in runtime entrypoint
RuntimeDetector now derives the correct PropertiesLauncher FQN from the JAR manifest Main-Class package. Spring Boot 3.2+ uses org.springframework.boot.loader.launch.PropertiesLauncher, pre-3.2 uses org.springframework.boot.loader.PropertiesLauncher. DockerRuntimeOrchestrator uses the detected class instead of a hardcoded 3.2+ reference, falling back to 3.2+ when not auto-detected. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -48,8 +48,11 @@ public final class RuntimeDetector {
|
||||
}
|
||||
|
||||
// Spring Boot: any launcher in org.springframework.boot.loader
|
||||
// Derive PropertiesLauncher from the same package as the detected launcher
|
||||
// (3.2+ uses org.springframework.boot.loader.launch.*, pre-3.2 uses org.springframework.boot.loader.*)
|
||||
if (mainClass.startsWith("org.springframework.boot.loader")) {
|
||||
return new DetectionResult(RuntimeType.SPRING_BOOT, null);
|
||||
String loaderPackage = mainClass.substring(0, mainClass.lastIndexOf('.'));
|
||||
return new DetectionResult(RuntimeType.SPRING_BOOT, loaderPackage + ".PropertiesLauncher");
|
||||
}
|
||||
|
||||
// Quarkus
|
||||
|
||||
@@ -44,7 +44,7 @@ class RuntimeDetectorTest {
|
||||
Path jar = createJarWithMainClass("org.springframework.boot.loader.launch.JarLauncher");
|
||||
RuntimeDetector.DetectionResult result = RuntimeDetector.detect(jar);
|
||||
assertEquals(RuntimeType.SPRING_BOOT, result.runtimeType());
|
||||
assertNull(result.mainClass());
|
||||
assertEquals("org.springframework.boot.loader.launch.PropertiesLauncher", result.mainClass());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -52,7 +52,7 @@ class RuntimeDetectorTest {
|
||||
Path jar = createJarWithMainClass("org.springframework.boot.loader.launch.PropertiesLauncher");
|
||||
RuntimeDetector.DetectionResult result = RuntimeDetector.detect(jar);
|
||||
assertEquals(RuntimeType.SPRING_BOOT, result.runtimeType());
|
||||
assertNull(result.mainClass());
|
||||
assertEquals("org.springframework.boot.loader.launch.PropertiesLauncher", result.mainClass());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -60,7 +60,7 @@ class RuntimeDetectorTest {
|
||||
Path jar = createJarWithMainClass("org.springframework.boot.loader.JarLauncher");
|
||||
RuntimeDetector.DetectionResult result = RuntimeDetector.detect(jar);
|
||||
assertEquals(RuntimeType.SPRING_BOOT, result.runtimeType());
|
||||
assertNull(result.mainClass());
|
||||
assertEquals("org.springframework.boot.loader.PropertiesLauncher", result.mainClass());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user