From d92a75c66b505fe326318238bd8575e3c85b3bc5 Mon Sep 17 00:00:00 2001 From: Hyeongjun Cho Date: Wed, 2 Sep 2026 17:50:48 +0900 Subject: [PATCH] Print a simple error message when a jarmode tools command fails See gh-51540 Signed-off-by: Hyeongjun Cho --- .../springframework/boot/jarmode/tools/ToolsJarMode.java | 5 +++++ .../boot/jarmode/tools/ToolsJarModeTests.java | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/loader/spring-boot-jarmode-tools/src/main/java/org/springframework/boot/jarmode/tools/ToolsJarMode.java b/loader/spring-boot-jarmode-tools/src/main/java/org/springframework/boot/jarmode/tools/ToolsJarMode.java index c8c705ea8d8..c9cfe51fcca 100644 --- a/loader/spring-boot-jarmode-tools/src/main/java/org/springframework/boot/jarmode/tools/ToolsJarMode.java +++ b/loader/spring-boot-jarmode-tools/src/main/java/org/springframework/boot/jarmode/tools/ToolsJarMode.java @@ -22,11 +22,13 @@ import java.util.List; import org.jspecify.annotations.Nullable; import org.springframework.boot.loader.jarmode.JarMode; +import org.springframework.boot.loader.jarmode.JarModeErrorException; /** * {@link JarMode} providing {@code "tools"} support. * * @author Moritz Halbritter + * @author Hyeongjun Cho * @since 3.3.0 */ public class ToolsJarMode implements JarMode { @@ -54,6 +56,9 @@ public class ToolsJarMode implements JarMode { try { new Runner(this.out, this.context, getCommands(this.context)).run(args); } + catch (JarModeErrorException ex) { + throw ex; + } catch (Exception ex) { throw new IllegalStateException(ex); } diff --git a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ToolsJarModeTests.java b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ToolsJarModeTests.java index de5ad3c9d60..fc4c401fefe 100644 --- a/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ToolsJarModeTests.java +++ b/loader/spring-boot-jarmode-tools/src/test/java/org/springframework/boot/jarmode/tools/ToolsJarModeTests.java @@ -21,12 +21,16 @@ import java.io.IOException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.springframework.boot.loader.jarmode.JarModeErrorException; + import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; /** * Tests for {@link ToolsJarMode}. * * @author Moritz Halbritter + * @author Hyeongjun Cho */ class ToolsJarModeTests extends AbstractJarModeTests { @@ -95,6 +99,11 @@ class ToolsJarModeTests extends AbstractJarModeTests { assertThat(this.out).hasSameContentAsResource("tools-error-option-missing-value-output.txt"); } + @Test + void commandFailureIsThrownAsJarModeErrorException() { + assertThatExceptionOfType(JarModeErrorException.class).isThrownBy(() -> run("list-layers")); + } + private void run(String... args) { this.mode.run("tools", args); }