Closed
Description
When using Spring Boot's Layering feature to extract a jar file that only has dependencies and does not directly have classes an IllegalStateException
is thrown.
java.lang.IllegalStateException: java.lang.IllegalStateException: No layer defined in index for file 'BOOT-INF/classes/'
at org.springframework.boot.jarmode.tools.ToolsJarMode.run(ToolsJarMode.java:56)
at org.springframework.boot.loader.launch.JarModeRunner.runJarMode(JarModeRunner.java:64)
at org.springframework.boot.loader.launch.JarModeRunner.main(JarModeRunner.java:44)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:102)
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:64)
at org.springframework.boot.loader.launch.JarLauncher.main(JarLauncher.java:40)
Caused by: java.lang.IllegalStateException: No layer defined in index for file 'BOOT-INF/classes/'
at org.springframework.boot.jarmode.tools.IndexedLayers.getLayer(IndexedLayers.java:92)
at org.springframework.boot.jarmode.tools.IndexedLayers.getApplicationLayerName(IndexedLayers.java:75)
at org.springframework.boot.jarmode.tools.ExtractCommand$LayersFileResolver.resolveApplication(ExtractCommand.java:467)
at org.springframework.boot.jarmode.tools.ExtractCommand.createApplication(ExtractCommand.java:235)
at org.springframework.boot.jarmode.tools.ExtractCommand.run(ExtractCommand.java:115)
at org.springframework.boot.jarmode.tools.Command.run(Command.java:112)
at org.springframework.boot.jarmode.tools.Runner.runCommand(Runner.java:68)
at org.springframework.boot.jarmode.tools.Runner.run(Runner.java:55)
at org.springframework.boot.jarmode.tools.Runner.run(Runner.java:47)
at org.springframework.boot.jarmode.tools.ToolsJarMode.run(ToolsJarMode.java:53)
... 7 more
Reproducing the Issue
The issue can be reproduced using this sample project
https://github.com/matthew-js-porter/spring-boot-layers-issue/tree/main
- clone the repository
- build the project
mvn package
- extract the jar
java -Djarmode=tools -jar demo-app/target/demo-app-0.0.1-SNAPSHOT.jar extract --layers --destination extracted
- Observe the exception