quarkusio / quarkus

Quarkus: Supersonic Subatomic Java.
https://quarkus.io
Apache License 2.0
13.49k stars 2.6k forks source link

Re-augmentation in jib image #41797

Closed kpagratis closed 1 month ago

kpagratis commented 1 month ago

Describe the bug

Running a re-augment in a jib image fails because it's trying to find the jar in a default location.

Expected behavior

No response

Actual behavior

No response

How to Reproduce?

I created the image like so

gradle <myapp>:build -Dquarkus.container-image.build=true \
    -Dquarkus.jib.platforms=linux/arm64 \
    -Dquarkus.container-image.tag=${imageTag} \
    -Dquarkus.container-image.push=false \
    -Dquarkus.package.jar.type=mutable-jar

when i attempt to run java -jar -Dquarkus.launch.rebuild=true quarkus-run.jar in the image i get the following stacktraces:

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doReaugment(QuarkusEntryPoint.java:90)
    at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:49)
    at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:33)
Caused by: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
    [error]: Build step io.quarkus.deployment.pkg.steps.JarResultBuildStep#buildRunnerJar threw an exception: java.lang.IllegalStateException: java.nio.file.NoSuchFileException: /home/quarkus-app/app/server-unspecified.jar
    at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:858)
    at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
    at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
    at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2516)
    at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2495)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1521)
    at java.base/java.lang.Thread.run(Thread.java:1583)
    at org.jboss.threads.JBossThread.run(JBossThread.java:483)
Caused by: java.nio.file.NoSuchFileException: /home/quarkus-app/app/server-unspecified.jar
    at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
    at java.base/sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)
    at java.base/sun.nio.fs.UnixFileSystemProvider.readAttributes(UnixFileSystemProvider.java:171)
    at java.base/sun.nio.fs.LinuxFileSystemProvider.readAttributes(LinuxFileSystemProvider.java:99)
    at java.base/java.nio.file.Files.readAttributes(Files.java:1853)
    at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1445)
    at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:724)
    at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:251)
    at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:180)
    at java.base/java.util.jar.JarFile.<init>(JarFile.java:345)
    at java.base/java.util.jar.JarFile.<init>(JarFile.java:316)
    at java.base/java.util.jar.JarFile.<init>(JarFile.java:282)
    at io.quarkus.bootstrap.runner.SerializedApplication.writeJar(SerializedApplication.java:183)
    at io.quarkus.bootstrap.runner.SerializedApplication.write(SerializedApplication.java:75)
    at io.quarkus.deployment.pkg.steps.JarResultBuildStep.buildThinJar(JarResultBuildStep.java:747)
    at io.quarkus.deployment.pkg.steps.JarResultBuildStep.buildRunnerJar(JarResultBuildStep.java:225)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
    ... 7 more

    at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:331)
    at io.quarkus.runner.bootstrap.AugmentActionImpl.createProductionApplication(AugmentActionImpl.java:173)
    at io.quarkus.deployment.mutability.ReaugmentTask.main(ReaugmentTask.java:70)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    ... 4 more
Caused by: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
    [error]: Build step io.quarkus.deployment.pkg.steps.JarResultBuildStep#buildRunnerJar threw an exception: java.lang.IllegalStateException: java.nio.file.NoSuchFileException: /home/quarkus-app/app/server-unspecified.jar
    at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:858)
    at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
    at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
    at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2516)
    at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2495)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1521)
    at java.base/java.lang.Thread.run(Thread.java:1583)
    at org.jboss.threads.JBossThread.run(JBossThread.java:483)
Caused by: java.nio.file.NoSuchFileException: /home/quarkus-app/app/server-unspecified.jar
    at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
    at java.base/sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)
    at java.base/sun.nio.fs.UnixFileSystemProvider.readAttributes(UnixFileSystemProvider.java:171)
    at java.base/sun.nio.fs.LinuxFileSystemProvider.readAttributes(LinuxFileSystemProvider.java:99)
    at java.base/java.nio.file.Files.readAttributes(Files.java:1853)
    at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1445)
    at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:724)
    at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:251)
    at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:180)
    at java.base/java.util.jar.JarFile.<init>(JarFile.java:345)
    at java.base/java.util.jar.JarFile.<init>(JarFile.java:316)
    at java.base/java.util.jar.JarFile.<init>(JarFile.java:282)
    at io.quarkus.bootstrap.runner.SerializedApplication.writeJar(SerializedApplication.java:183)
    at io.quarkus.bootstrap.runner.SerializedApplication.write(SerializedApplication.java:75)
    at io.quarkus.deployment.pkg.steps.JarResultBuildStep.buildThinJar(JarResultBuildStep.java:747)
    at io.quarkus.deployment.pkg.steps.JarResultBuildStep.buildRunnerJar(JarResultBuildStep.java:225)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
    ... 7 more

    at io.quarkus.builder.Execution.run(Execution.java:123)
    at io.quarkus.builder.BuildExecutionBuilder.execute(BuildExecutionBuilder.java:79)
    at io.quarkus.deployment.QuarkusAugmentor.run(QuarkusAugmentor.java:160)
    at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:327)
    ... 7 more
Caused by: java.lang.IllegalStateException: java.nio.file.NoSuchFileException: /home/quarkus-app/app/server-unspecified.jar
    at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:858)
    at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
    at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
    at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2516)
    at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2495)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1521)
    at java.base/java.lang.Thread.run(Thread.java:1583)
    at org.jboss.threads.JBossThread.run(JBossThread.java:483)
Caused by: java.nio.file.NoSuchFileException: /home/quarkus-app/app/server-unspecified.jar
    at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
    at java.base/sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)
    at java.base/sun.nio.fs.UnixFileSystemProvider.readAttributes(UnixFileSystemProvider.java:171)
    at java.base/sun.nio.fs.LinuxFileSystemProvider.readAttributes(LinuxFileSystemProvider.java:99)
    at java.base/java.nio.file.Files.readAttributes(Files.java:1853)
    at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1445)
    at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:724)
    at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:251)
    at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:180)
    at java.base/java.util.jar.JarFile.<init>(JarFile.java:345)
    at java.base/java.util.jar.JarFile.<init>(JarFile.java:316)
    at java.base/java.util.jar.JarFile.<init>(JarFile.java:282)
    at io.quarkus.bootstrap.runner.SerializedApplication.writeJar(SerializedApplication.java:183)
    at io.quarkus.bootstrap.runner.SerializedApplication.write(SerializedApplication.java:75)
    at io.quarkus.deployment.pkg.steps.JarResultBuildStep.buildThinJar(JarResultBuildStep.java:747)
    at io.quarkus.deployment.pkg.steps.JarResultBuildStep.buildRunnerJar(JarResultBuildStep.java:225)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
    ... 7 more

I was able to get re-augmentation to work but i had to set the quarkus.package.output-directory

java -jar -Dquarkus.launch.rebuild=true -Dquarkus.package.output-directory=${PWD} quarkus-run.jar

Output of uname -a or ver

No response

Output of java -version

No response

Quarkus version or git rev

No response

Build tool (ie. output of mvnw --version or gradlew --version)

No response

Additional information

No response

quarkus-bot[bot] commented 1 month ago

/cc @geoand (jib)

geoand commented 1 month ago

I'm actually a little confused.

Looking at:

gradle <myapp>:build -Dquarkus.container-image.build=true \
    -Dquarkus.jib.platforms=linux/arm64 \
    -Dquarkus.container-image.tag=${imageTag} \
    -Dquarkus.container-image.push=false \
    -Dquarkus.package.jar.type=mutable-jar

I assume you are attempting to create a container image.

But then you launch the application via:

java -jar -Dquarkus.launch.rebuild=true quarkus-run.jar
kpagratis commented 1 month ago

I'm actually attempting to start the app with java -jar -Dquarkus.launch.rebuild=true -Dquarkus.package.output-directory=/home/jboss quarkus-run.jar && java -Djava.util.logging.manager=org.jboss.logmanager.LogManager -jar quarkus-run.jar

But I would expect not to have to set the quarkus.package.output-directory property

kpagratis commented 1 month ago

And then the additional ask would be to have a mechanism to have the container re-augment prior to start. either with a configuration to the jib extension or with passing a environment variable to the container on start

geoand commented 1 month ago

I'm actually attempting to start the app with java -jar -Dquarkus.launch.rebuild=true -Dquarkus.package.output-directory=/home/jboss quarkus-run.jar && java -Djava.util.logging.manager=org.jboss.logmanager.LogManager -jar quarkus-run.jar

But I would expect not to have to set the quarkus.package.output-directory property

Ah, so these are the commands executed inside the container, correct?

kpagratis commented 1 month ago

@geoand yes that's correct.

geoand commented 1 month ago

Gotcha, I'll have a look soon

geoand commented 1 month ago

@kpagratis can you check #41888 please?

kpagratis commented 1 month ago

Sure I'll try today. Thanks!

kpagratis commented 1 month ago

I just tried with the pr branch and am still seeing the exception when running docker run -it --entrypoint "/bin/sh" <my image sha> -c "java -jar -Dquarkus.launch.rebuild=true quarkus-run.jar"

geoand commented 1 month ago

Any chance you can attach a sample that exhibits the problem?