Building an app with AOT enabled and then using extract leads to the following:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:91)
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:53)
at org.springframework.boot.loader.launch.JarLauncher.main(JarLauncher.java:58)
Caused by: java.lang.IllegalStateException: java.io.UncheckedIOException: java.util.zip.ZipException: duplicate entry: META-INF/native-image/
at org.springframework.boot.jarmode.tools.ToolsJarMode.run(ToolsJarMode.java:56)
at org.springframework.boot.loader.launch.JarModeRunner.main(JarModeRunner.java:43)
... 7 more
Caused by: java.io.UncheckedIOException: java.util.zip.ZipException: duplicate entry: META-INF/native-image/
at org.springframework.boot.jarmode.tools.ExtractCommand.run(ExtractCommand.java:118)
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)
... 8 more
Caused by: java.util.zip.ZipException: duplicate entry: META-INF/native-image/
at java.base/java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:244)
at java.base/java.util.jar.JarOutputStream.putNextEntry(JarOutputStream.java:115)
at org.springframework.boot.jarmode.tools.ExtractCommand.lambda$createApplication$3(ExtractCommand.java:258)
at org.springframework.boot.jarmode.tools.ExtractCommand.withJarEntries(ExtractCommand.java:333)
at org.springframework.boot.jarmode.tools.ExtractCommand.createApplication(ExtractCommand.java:254)
at org.springframework.boot.jarmode.tools.ExtractCommand.run(ExtractCommand.java:114)
... 13 more
This can reproduce build building this sample app with the following command: java -Djarmode=tools -jar build/libs/test-extract-aot-0.0.1-SNAPSHOT.jar extract
Comment From: snicoll
I've updated the demo to add a Maven project. Extracting works as expected so it looks like it's specific to a jar produced by the Gradle plugin.
Comment From: wilkinsona
This also fails with Maven if, for example, you have a META-INF/services/… file in src/main/resources. In this case, which also affects Gradle, AOT isn't required for the problem to occur.
Comment From: rogelio-datasite
Is there a workaround for this? Or do we need to wait for the 3.3.1 release?
Comment From: wilkinsona
I'm not aware of a workaround. 3.3.1 will be released on Thursday so not too long to wait.