Skip to content

IllegalStateException when extracting using layers a module with no code of its own #45385

Closed
@matthew-js-porter

Description

@matthew-js-porter

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

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions