quarkiverse / quarkus-web-bundler

Create full-stack web apps quickly and easily with this Quarkus extension. It offers zero-configuration bundling for your web app scripts (JS, JSX, TS, TSX), dependencies (jQuery, React, htmx, etc.), and styles (CSS, SCSS, SASS).
Apache License 2.0
16 stars 9 forks source link

FileSystemException on Windows with live-reload enabled #240

Open shemminga opened 2 weeks ago

shemminga commented 2 weeks ago

Describe the bug

On Windows, with browser-live-reload enabled, the quarkus-web-bundler extension will try to create symlinks. Windows prohibits this for normal users.

The symlink is created here: https://github.com/quarkiverse/quarkus-web-bundler/blob/1.5.3/deployment/src/main/java/io/quarkiverse/web/bundler/deployment/PrepareForBundlingProcessor.java#L204

Please note that the exception message below is in Dutch, because that's how Windows passes it along. I've looked up what the error message would be in English:

Expected behavior

Successful start.

Actual behavior

An exception occurs:

Failed to start quarkus: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.quarkiverse.web.bundler.deployment.PrepareForBundlingProcessor#prepareForBundling threw an exception: java.io.UncheckedIOException: java.nio.file.FileSystemException: C:\Users\sjoer\Documents\proj\qdemo\code-with-quarkus\target\web-bundler\dev\app\app.js: Een van de vereiste bevoegdheden is niet aan de client toegekend

How to Reproduce?

  1. quarkus.cmd create app -x quarkus-web-bundler -code
  2. cd .\code-with-quarkus\
  3. quarkus.cmd dev
    • Exception: java.nio.file.FileSystemException: C:\Users\sjoer\Documents\proj\qdemo\code-with-quarkus\target\web-bundler\dev\app\app.js: A required privilege is not held by the client (message translated)
  4. `echo 'quarkus.web-bundler.browser-live-reload=false' >> .\src\main\resources\application.properties
  5. quarkus.cmd dev
    • Successful start

Output of uname -a or ver

Windows 11 Pro (version 10.0.22631 N/A Build 22631)

Output of java -version

openjdk version "21.0.2" 2024-01-16

Quarkus version or git rev

Quarkus: 3.11.2 quarkus-web-bundler: 1.5.3

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

Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)

Additional information

Full stack trace:

2024-06-17 03:26:52,995 ERROR [io.qua.dep.dev.IsolatedDevModeMain] (main) Failed to start quarkus: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.quarkiverse.web.bundler.deployment.PrepareForBundlingProcessor#prepareForBundling threw an exception: java.io.UncheckedIOException: java.nio.file.FileSystemException: C:\Users\sjoer\Documents\proj\qdemo\code-with-quarkus\target\web-bundler\dev\app\app.js: Een van de vereiste bevoegdheden is niet aan de client toegekend
        at io.quarkiverse.web.bundler.deployment.PrepareForBundlingProcessor.prepareForBundling(PrepareForBundlingProcessor.java:259)
        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)
        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.FileSystemException: C:\Users\sjoer\Documents\proj\qdemo\code-with-quarkus\target\web-bundler\dev\app\app.js: Een van de vereiste bevoegdheden is niet aan de client toegekend
        at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:92)
        at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
        at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
        at java.base/sun.nio.fs.WindowsFileSystemProvider.createSymbolicLink(WindowsFileSystemProvider.java:604)
        at java.base/java.nio.file.Files.createSymbolicLink(Files.java:1069)
        at io.quarkiverse.web.bundler.deployment.PrepareForBundlingProcessor.prepareForBundling(PrepareForBundlingProcessor.java:204)
        ... 10 more

        at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:331)
        at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:252)
        at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:58)
        at io.quarkus.deployment.dev.IsolatedDevModeMain.firstStart(IsolatedDevModeMain.java:113)
        at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:435)
        at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:56)
        at io.quarkus.bootstrap.app.CuratedApplication.runInCl(CuratedApplication.java:138)
        at io.quarkus.bootstrap.app.CuratedApplication.runInAugmentClassLoader(CuratedApplication.java:93)
        at io.quarkus.deployment.dev.DevModeMain.start(DevModeMain.java:131)
        at io.quarkus.deployment.dev.DevModeMain.main(DevModeMain.java:62)
Caused by: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.quarkiverse.web.bundler.deployment.PrepareForBundlingProcessor#prepareForBundling threw an exception: java.io.UncheckedIOException: java.nio.file.FileSystemException: C:\Users\sjoer\Documents\proj\qdemo\code-with-quarkus\target\web-bundler\dev\app\app.js: Een van de vereiste bevoegdheden is niet aan de client toegekend
        at io.quarkiverse.web.bundler.deployment.PrepareForBundlingProcessor.prepareForBundling(PrepareForBundlingProcessor.java:259)
        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)
        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.FileSystemException: C:\Users\sjoer\Documents\proj\qdemo\code-with-quarkus\target\web-bundler\dev\app\app.js: Een van de vereiste bevoegdheden is niet aan de client toegekend
        at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:92)
        at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
        at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
        at java.base/sun.nio.fs.WindowsFileSystemProvider.createSymbolicLink(WindowsFileSystemProvider.java:604)
        at java.base/java.nio.file.Files.createSymbolicLink(Files.java:1069)
        at io.quarkiverse.web.bundler.deployment.PrepareForBundlingProcessor.prepareForBundling(PrepareForBundlingProcessor.java:204)
        ... 10 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)
        ... 9 more
Caused by: java.io.UncheckedIOException: java.nio.file.FileSystemException: C:\Users\sjoer\Documents\proj\qdemo\code-with-quarkus\target\web-bundler\dev\app\app.js: Een van de vereiste bevoegdheden is niet aan de client toegekend
        at io.quarkiverse.web.bundler.deployment.PrepareForBundlingProcessor.prepareForBundling(PrepareForBundlingProcessor.java:259)
        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)
        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.FileSystemException: C:\Users\sjoer\Documents\proj\qdemo\code-with-quarkus\target\web-bundler\dev\app\app.js: Een van de vereiste bevoegdheden is niet aan de client toegekend
        at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:92)
        at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
        at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
        at java.base/sun.nio.fs.WindowsFileSystemProvider.createSymbolicLink(WindowsFileSystemProvider.java:604)
        at java.base/java.nio.file.Files.createSymbolicLink(Files.java:1069)
        at io.quarkiverse.web.bundler.deployment.PrepareForBundlingProcessor.prepareForBundling(PrepareForBundlingProcessor.java:204)
        ... 10 more
ia3andy commented 2 weeks ago

@shemminga thanks for reporting this. We've came across it during a lab, I will:

We don't really have the choice about the sym-link for enabling live-reload.

ia3andy commented 2 weeks ago

@shemminga unless you want to give it a shot?