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.