Quarkus: Hot reload fails with InvalidPathException on Windows

Created on 20 Aug 2019  ·  79Comments  ·  Source: quarkusio/quarkus

Starting with Quarkus 0.21.0 hot reload failes with InvalidPathException (at least) on Windows.

When a Quarkus application runs in dev mode, i. e. using mvn quarkus:dev, a REST call will trigger a hot reload, if one of the source files has changed before. That worked like a charm up to version 0.20.0. With 0.21.0 the REST response contains an error message:

<header> <h1 class="container">Error restarting Quarkus</h1> <div class="exception-message"> <h2 class="container">java.nio.file.InvalidPathException: Illegal char &lt;:&gt; at index 2: /C:/Users/dw/.m2/repository/io/quarkus/arc/arc/0.21.0/arc-0.21.0.jar</h2> </div> </header>

As the message complains about the ':' in the file path, I guess, the problem arises on Windows only.

The bug can easily be reproduced:

  • Use any of the applications from the guide, e. g getting-started
  • Make sure that quarkus.version in pom.xml is 0.21.0
  • Build the application and start dev mode (mvn clean package quarkus:dev)
  • Make some code change
  • Call a REST endpoint (curl http://localhost:8080/hello)

My environment:

  • Windows 10 Pro
  • AdoptOpenJDK 8 (jdk8u202-b08) and 11 (jdk-11.0.3+7)
kinbug releasnoteworthy-feature

Most helpful comment

I get the same error with 0.23.1 in Windows 10 and OpenJDK 11 with a fresh generated quarkus application. I just switched the version to 0.23.1:
java.nio.file.InvalidPathException: Illegal char <:> at index 2: /C:/Users/Marcel/.m2/repository/io/quarkus/quarkus-netty/0.23.1/quarkus-netty-0.23.1.jar
at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229)
at jdk.compiler/com.sun.tools.javac.file.FSInfo.getJarClassPath(FSInfo.java:112)
at jdk.compiler/com.sun.tools.javac.file.CacheFSInfo.getJarClassPath(CacheFSInfo.java:93)
at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addJarClassPath(Locations.java:423)
at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFile(Locations.java:413)
at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFiles(Locations.java:345)
at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFiles(Locations.java:352)
at jdk.compiler/com.sun.tools.javac.file.Locations$SimpleLocationHandler.setPaths(Locations.java:724)
at jdk.compiler/com.sun.tools.javac.file.Locations.setLocation(Locations.java:2098)
at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.setLocation(JavacFileManager.java:927)
at io.quarkus.dev.JavaCompilationProvider.compile(JavaCompilationProvider.java:48)
at io.quarkus.dev.ClassLoaderCompiler.compile(ClassLoaderCompiler.java:157)
at io.quarkus.dev.RuntimeUpdatesProcessor.checkForChangedClasses(RuntimeUpdatesProc

All 79 comments

Hi @dirkweil, I just tried (from a MacBook) with both 0.21.0 and 0.21.1 (which is the latest Quarkus release) and couldn't reproduce the issue.

Hi @dirkweil, I just tried (from a MacBook) with both 0.21.0 and 0.21.1 (which is the latest Quarkus release) and couldn't reproduce the issue.

I guess it is the Windows thingy :-)

Oh right, I missed that detail in @dirkweil's message :)

No, I don't think it's the same issue as #3561. Looks like a different one.

@dirkweil could you provide the full stacktrace? No Windows box here :).

Thanks!

Hello!

I'm getting virtually the same walkback, but with the different JAR file:

java.nio.file.InvalidPathException: Illegal char <:> at index 2: /C:/Users/serov/.m2/repository/io/quarkus/quarkus-undertow-common-substitutions/0.21.1/quarkus-undertow-common-substitutions-0.21.1.jar
    at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
    at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
    at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
    at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
    at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229)
    at jdk.compiler/com.sun.tools.javac.file.FSInfo.getJarClassPath(FSInfo.java:112)
    at jdk.compiler/com.sun.tools.javac.file.CacheFSInfo.getJarClassPath(CacheFSInfo.java:93)
    at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addJarClassPath(Locations.java:423)
    at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFile(Locations.java:413)
    at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFiles(Locations.java:345)
    at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFiles(Locations.java:352)
    at jdk.compiler/com.sun.tools.javac.file.Locations$SimpleLocationHandler.setPaths(Locations.java:724)
    at jdk.compiler/com.sun.tools.javac.file.Locations.setLocation(Locations.java:2098)
    at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.setLocation(JavacFileManager.java:927)
    at io.quarkus.dev.JavaCompilationProvider.compile(JavaCompilationProvider.java:48)
    at io.quarkus.dev.ClassLoaderCompiler.compile(ClassLoaderCompiler.java:156)
    at io.quarkus.dev.RuntimeUpdatesProcessor.checkForChangedClasses(RuntimeUpdatesProcessor.java:164)
    at io.quarkus.dev.RuntimeUpdatesProcessor.doScan(RuntimeUpdatesProcessor.java:103)
    at io.quarkus.undertow.deployment.devmode.UndertowHotReplacementSetup.handleHotDeploymentRequest(UndertowHotReplacementSetup.java:72)
    at io.quarkus.undertow.deployment.devmode.UndertowHotReplacementSetup$1$1.handleRequest(UndertowHotReplacementSetup.java:61)
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:376)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)
    at io.quarkus.runtime.CleanableExecutor$CleaningRunnable.run(CleanableExecutor.java:224)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2011)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1535)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1426)
    at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
    at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
    at java.base/java.lang.Thread.run(Thread.java:834)
    at org.jboss.threads.JBossThread.run(JBossThread.java:479)

Same here, with 0.21 and 0.21.1 with Windows 7 and 10:

java.nio.file.InvalidPathException: Illegal char <:> at index 2: /C:/Users/rik/.m2/repository/io/quarkus/arc/arc/0.21.0/arc-0.21.0.jar
    at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
    at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
    at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
    at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
    at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229)
    at jdk.compiler/com.sun.tools.javac.file.FSInfo.getJarClassPath(FSInfo.java:112)
    at jdk.compiler/com.sun.tools.javac.file.CacheFSInfo.getJarClassPath(CacheFSInfo.java:93)
    at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addJarClassPath(Locations.java:423)
    at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFile(Locations.java:413)
    at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFiles(Locations.java:345)
    at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFiles(Locations.java:352)
    at jdk.compiler/com.sun.tools.javac.file.Locations$SimpleLocationHandler.setPaths(Locations.java:724)
    at jdk.compiler/com.sun.tools.javac.file.Locations.setLocation(Locations.java:2098)
    at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.setLocation(JavacFileManager.java:927)
    at io.quarkus.dev.JavaCompilationProvider.compile(JavaCompilationProvider.java:48)
    at io.quarkus.dev.ClassLoaderCompiler.compile(ClassLoaderCompiler.java:156)
    at io.quarkus.dev.RuntimeUpdatesProcessor.checkForChangedClasses(RuntimeUpdatesProcessor.java:164)
    at io.quarkus.dev.RuntimeUpdatesProcessor.doScan(RuntimeUpdatesProcessor.java:103)
    at io.quarkus.undertow.deployment.devmode.UndertowHotReplacementSetup.handleHotDeploymentRequest(UndertowHotReplacementSetup.java:72)
    at io.quarkus.undertow.deployment.devmode.UndertowHotReplacementSetup$1$1.handleRequest(UndertowHotReplacementSetup.java:61)
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:376)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)
    at io.quarkus.runtime.CleanableExecutor$CleaningRunnable.run(CleanableExecutor.java:224)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2011)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1535)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1426)
    at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
    at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
    at java.base/java.lang.Thread.run(Thread.java:834)
    at org.jboss.threads.JBossThread.run(JBossThread.java:479)

There is no error shown in the log; it says only

2019-08-21 10:55:14,638 INFO [io.qua.dev] (executor-thread-1) Changed source files detected, recompiling [C:\GEDOPLAN\projects\gedoplan\showcase\quarkus-demo\quarkus-getting-started\src\main\java\de\gedoplan\showcase\service\GreetingService.java]

The error message is in the response of the REST call triggering hot reload - see attached file.
errorResponse.txt

I guess it has something to do with commit c2949cb2f4a375b968a0f57737c71001b951724a. Particular with ClassLoaderCompiler line 56ff:

        //this is pretty yuck, but under JDK11 the URLClassLoader trick does not work
        Enumeration<URL> manifests = classLoader.getResources("META-INF/MANIFEST.MF");
        while (manifests.hasMoreElements()) {
            URL url = manifests.nextElement();
            if (url.getProtocol().equals("jar")) {
                String path = url.getPath();
                if (path.startsWith("file:")) {
                    path = path.substring(5, path.lastIndexOf('!'));
                    urls.add(new File(URLDecoder.decode(path, StandardCharsets.UTF_8.name())).toURL());
                }
            }
        }

My local META-INF/MANIFEST.MF e.g. contains this Class-Path: "/C:/Users/rik/.m2/repository/io/quarkus/arc/arc/0.21.0/arc-0.21.0.jar"

I have a preliminary fix at https://github.com/dmlloyd/quarkus/tree/fix-3592 which I am still testing for this.

Looks like something more subtle is going on. Working on it but I'm on a Windows VM and I'm not skilled with Windows, so your continued patience is appreciated :)

I think I figured out what's happening.

The javac tool classes have their own handler for class paths. When you compile against a JAR on the class path, it apparently is recursively searching the manifests of each of those JARs and adding the dependency JARs as well.

However one (or more) of the 100+ JAR files on the class path during this point has a Class-Path manifest attribute which contains a file: URL. But com.sun.tools.javac.file.FSInfo#getJarClassPath doesn't support it: it doesn't parse as a relative URI per spec, rather it just mashes it in as a path to the compiler.

So the next step is to find & fix the JAR that has the bogus information. AFIACT there's no way to "clean" the data before the javac tool gets it.

I also get failing tests on Windows because the generated surefirebooter#######.jar contains Class-Path: file:/C:/Users/... already.

For posterity I'll add another reference here to https://github.com/quarkusio/quarkus/issues/1673#issuecomment-477205320 about proper URL handling for class paths...

There seems to be no solution to the surefire issue, at least before 3.0.0 is released (unless they decide to backport). But assuming a prebuilt Quarkus, we should be able to solve the part where we're writing absolute URIs into our own class paths, wherever that may be taking place.

Problem still exists at Quarkus 0.21.2.

Error restarting Quarkus
java.nio.file.InvalidPathException: Illegal char <:> at index 2: /C:/Users/Barbaros/.m2/repository/io/quarkus/arc/arc/0.21.2/arc-0.21.2.jar

java.nio.file.InvalidPathException: Illegal char <:> at index 2: /C:/Users/Barbaros/.m2/repository/io/quarkus/arc/arc/0.21.2/arc-0.21.2.jar at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182) at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153) at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77) at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92) at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229) at jdk.compiler/com.sun.tools.javac.file.FSInfo.getJarClassPath(FSInfo.java:112) at jdk.compiler/com.sun.tools.javac.file.CacheFSInfo.getJarClassPath(CacheFSInfo.java:93) at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addJarClassPath(Locations.java:423) at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFile(Locations.java:413) at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFiles(Locations.java:345) at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFiles(Locations.java:352) at jdk.compiler/com.sun.tools.javac.file.Locations$SimpleLocationHandler.setPaths(Locations.java:724) at jdk.compiler/com.sun.tools.javac.file.Locations.setLocation(Locations.java:2098) at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.setLocation(JavacFileManager.java:927) at io.quarkus.dev.JavaCompilationProvider.compile(JavaCompilationProvider.java:48) at io.quarkus.dev.ClassLoaderCompiler.compile(ClassLoaderCompiler.java:156) at io.quarkus.dev.RuntimeUpdatesProcessor.checkForChangedClasses(RuntimeUpdatesProcessor.java:164) at io.quarkus.dev.RuntimeUpdatesProcessor.doScan(RuntimeUpdatesProcessor.java:103) at io.quarkus.undertow.deployment.devmode.UndertowHotReplacementSetup.handleHotDeploymentRequest(UndertowHotReplacementSetup.java:72) at io.quarkus.undertow.deployment.devmode.UndertowHotReplacementSetup$1$1.handleRequest(UndertowHotReplacementSetup.java:61) at io.undertow.server.Connectors.executeRootHandler(Connectors.java:376) at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) at io.quarkus.runtime.CleanableExecutor$CleaningRunnable.run(CleanableExecutor.java:224) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2011) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1535) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1426) at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29) at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29) at java.base/java.lang.Thread.run(Thread.java:834) at org.jboss.threads.JBossThread.run(JBossThread.java:479)

Tested in;

  • Windows 10 Pro
  • OpenJDK Runtime Environment Corretto-11.0.4.11.1 (build 11.0.4+11-LTS)

@dmlloyd any idea? I checked and your commit is part of 0.21.2.

The remaining issue should be fixed with #3934 - at least, I can't get it to fail locally now...

Still get the error in 0.22.0 in Windows 10 Pro and OpenJDK 11.
java.nio.file.InvalidPathException: Illegal char <:> at index 2: /C:/Users/rik/.m2/repository/io/quarkus/arc/arc/0.22.0/arc-0.22.0.jar at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182) at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153) at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77) at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92) at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229) at jdk.compiler/com.sun.tools.javac.file.FSInfo.getJarClassPath(FSInfo.java:112) at jdk.compiler/com.sun.tools.javac.file.CacheFSInfo.getJarClassPath(CacheFSInfo.java:93) at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addJarClassPath(Locations.java:423) at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFile(Locations.java:413) at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFiles(Locations.java:345) at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFiles(Locations.java:352) at jdk.compiler/com.sun.tools.javac.file.Locations$SimpleLocationHandler.setPaths(Locations.java:724) at jdk.compiler/com.sun.tools.javac.file.Locations.setLocation(Locations.java:2098) at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.setLocation(JavacFileManager.java:927) at io.quarkus.dev.JavaCompilationProvider.compile(JavaCompilationProvider.java:48)

Commit df51bee0c05d7f9dcdedc315b63d08465e20cbd6 has not yet been included within a release as far as I can tell. The next release should have it.

I get the same error with 0.23.1 in Windows 10 and OpenJDK 11 with a fresh generated quarkus application. I just switched the version to 0.23.1:
java.nio.file.InvalidPathException: Illegal char <:> at index 2: /C:/Users/Marcel/.m2/repository/io/quarkus/quarkus-netty/0.23.1/quarkus-netty-0.23.1.jar
at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229)
at jdk.compiler/com.sun.tools.javac.file.FSInfo.getJarClassPath(FSInfo.java:112)
at jdk.compiler/com.sun.tools.javac.file.CacheFSInfo.getJarClassPath(CacheFSInfo.java:93)
at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addJarClassPath(Locations.java:423)
at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFile(Locations.java:413)
at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFiles(Locations.java:345)
at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFiles(Locations.java:352)
at jdk.compiler/com.sun.tools.javac.file.Locations$SimpleLocationHandler.setPaths(Locations.java:724)
at jdk.compiler/com.sun.tools.javac.file.Locations.setLocation(Locations.java:2098)
at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.setLocation(JavacFileManager.java:927)
at io.quarkus.dev.JavaCompilationProvider.compile(JavaCompilationProvider.java:48)
at io.quarkus.dev.ClassLoaderCompiler.compile(ClassLoaderCompiler.java:157)
at io.quarkus.dev.RuntimeUpdatesProcessor.checkForChangedClasses(RuntimeUpdatesProc

Reopening this since we have had a few reports suggesting it's still a problem in 0.23.2

hello, I have created a pull request for that :

4498

Could the folks that reported this issue perhaps try out #4498 and see if it addresses the issue?

@dmlloyd, I was able to get my hands on a Windows system and I was able to reproduce this consistently and narrow this down. An important higher level detail - this is reproducible only on recent (definitely on Java 11 but probably since Java 9?) JDK versions. It probably is because the code in recent JDK versions of com.sun.tools.javac.file.FSInfo#getJarClassPath changed from something like:

for (StringTokenizer st = new StringTokenizer(path); st.hasMoreTokens(); ) {
                String elt = st.nextToken();
                File f = (parent == null ? new File(elt) : new File(parent, elt));
                list.add(f);
            }

to

for (StringTokenizer st = new StringTokenizer(path);
                 st.hasMoreTokens(); ) {
                String elt = st.nextToken();
                Path f = FileSystems.getDefault().getPath(elt);
                if (!f.isAbsolute() && parent != null)
                    f = parent.resolve(f).toAbsolutePath();
                list.add(f);
            }

(usage of Path APIs)

More details follow:

(previously in this issue, you commented):

I think I figured out what's happening.

The javac tool classes have their own handler for class paths. When you compile against a JAR on the class path, it apparently is recursively searching the manifests of each of those JARs and adding the dependency JARs as well.

From what I see in the JDK code, yes, this I believe is what's happening.

(previously in this issue, you commented):

However one (or more) of the 100+ JAR files on the class path during this point has a Class-Path manifest attribute which contains a file: URL. But com.sun.tools.javac.file.FSInfo#getJarClassPath doesn't support it: it doesn't parse as a relative URI per spec, rather it just mashes it in as a path to the compiler.

Partially correct. What seems to be happening is - there's one (and just one I think) of those 100+ jars on the classpath which has a Class-Path manifest attribute of the form:

Class-Path: /C:/Users/Administrator/.m2/repository/io/quarkus/arc/arc/0.23.2/arc-0.23.2.jar /C:/Users/Administrator/.m2/repository/io/quarkus/quarkus-arc/0.23.2/quarkus-arc-0.23.2.jar

(rest of the entries snipped, since the pattern is similar)

As you rightly note - (in recent versions of JDK), the com.sun.tools.javac.file.FSInfo#getJarClassPath uses FileSystems.getDefault().getPath(elt) (where elt is each entry in that Class-Path attribute). This getPath API doesn't support the path parsing if it starts with the / character like above.

The only (I think) jar file which has this kind of Class-Path entries is our xxx-dev.jar file that we generate in the dev mojo in the code here https://github.com/quarkusio/quarkus/blob/master/devtools/maven/src/main/java/io/quarkus/maven/DevMojo.java#L495.

I'm not an expert when it comes to the URI API (it has always confused me and I have had to keep going back to experiemnts to understand how it behaves), but I've read the linked comment here https://github.com/quarkusio/quarkus/issues/1673#issuecomment-477205320. I'm not too sure why the getRawPath is used. From what I have debugged so far on Windows, the getRawPath() actually returns (at least on Windows) a value of the form /C:/Users/Administrator/.m2/repository/io/quarkus/arc/arc/0.23.2/arc-0.23.2.jar (notice the starting /). Because of that, I haven't seen it ever enter this if block here https://github.com/quarkusio/quarkus/blob/master/devtools/maven/src/main/java/io/quarkus/maven/DevMojo.java#L497. So, that Windows check is virtually a no-op. But of course, that isn't causing the problem here - the usage of getRawPath seems to be the root cause. Are we using it so as to let it handle the space characters (by encoding it)?

Keeping all this aside, I think this is a bug in the JDK code itself. Specifically, the public List<Path> getJarClassPath(Path file) throws IOException in com.sun.tools.javac.file.FSInfo is throwing an exception (java.nio.file.InvalidPathException) which isn't declared in its throws clause. I think it should just catch this java.nio.file.InvalidPathException and rethrow it as an IOException so that callers of this getJarClassPath can then catch it and just log it and move on like in the case of Locations.addJarClassPath here https://github.com/openjdk/jdk/blob/master/src/jdk.compiler/share/classes/com/sun/tools/javac/file/Locations.java#L425. This is an internal API of the JDK, so I don't know if this will be accepted as a bug, but I'll raise it in the OpenJDK compiler-dev list and ask for inputs.

Partially correct. What seems to be happening is - there's one (and just one I think) of those 100+ jars on the classpath which has a Class-Path manifest attribute of the form:

Class-Path: /C:/Users/Administrator/.m2/repository/io/quarkus/arc/arc/0.23.2/arc-0.23.2.jar /C:/Users/Administrator/.m2/repository/io/quarkus/quarkus-arc/0.23.2/quarkus-arc-0.23.2.jar

(rest of the entries snipped, since the pattern is similar)

That's expected/normal. This is a relative URI (even though it's an absolute path... a relative URI is one with no "scheme" component), so according to the JAR specification, this is allowed.

As you rightly note - (in recent versions of JDK), the com.sun.tools.javac.file.FSInfo#getJarClassPath uses FileSystems.getDefault().getPath(elt) (where elt is each entry in that Class-Path attribute). This getPath API doesn't support the path parsing if it starts with the / character like above.

The only (I think) jar file which has this kind of Class-Path entries is our xxx-dev.jar file that we generate in the dev mojo in the code here https://github.com/quarkusio/quarkus/blob/master/devtools/maven/src/main/java/io/quarkus/maven/DevMojo.java#L495.

I'm not an expert when it comes to the URI API (it has always confused me and I have had to keep going back to experiemnts to understand how it behaves), but I've read the linked comment here #1673 (comment). I'm not too sure why the getRawPath is used. From what I have debugged so far on Windows, the getRawPath() actually returns (at least on Windows) a value of the form /C:/Users/Administrator/.m2/repository/io/quarkus/arc/arc/0.23.2/arc-0.23.2.jar (notice the starting /). Because of that, I haven't seen it ever enter this if block here https://github.com/quarkusio/quarkus/blob/master/devtools/maven/src/main/java/io/quarkus/maven/DevMojo.java#L497. So, that Windows check is virtually a no-op. But of course, that isn't causing the problem here - the usage of getRawPath seems to be the root cause. Are we using it so as to let it handle the space characters (by encoding it)?

Yes, it handles the URI encoding for us, essentially creating a relative URI as the JAR file specification demands. Note that the block you mentioned is not meant to be entered for the /C: case, it's meant to be entered in the C: case (because C:/foo/bar is syntactically indistinguishable from an absolute URI, which is disallowed; by prepending a / we make it into a relative URI).

Keeping all this aside, I think this is a bug in the JDK code itself. Specifically, the public List<Path> getJarClassPath(Path file) throws IOException in com.sun.tools.javac.file.FSInfo is throwing an exception (java.nio.file.InvalidPathException) which isn't declared in its throws clause. I think it should just catch this java.nio.file.InvalidPathException and rethrow it as an IOException so that callers of this getJarClassPath can then catch it and just log it and move on like in the case of Locations.addJarClassPath here https://github.com/openjdk/jdk/blob/master/src/jdk.compiler/share/classes/com/sun/tools/javac/file/Locations.java#L425. This is an internal API of the JDK, so I don't know if this will be accepted as a bug, but I'll raise it in the OpenJDK compiler-dev list and ask for inputs.

I think they will: the JAR specification does clearly state that the URI is relative. They should be treating the string as a URI rather than a filesystem path; that's the beginning and end of the problem AFAICT.

See https://docs.oracle.com/javase/10/docs/specs/jar/jar.html#main_attributes for the exact spec verbiage. Note that this is the most recent one I could find.

Also: https://docs.oracle.com/javase/10/docs/specs/jar/jar.html#class-path-attribute

The most common cause for this kind of issue in the JDK, historically, is mistaking "relative URL" to mean "relative path" as the authors of the bad javac code seem to have done.

Is there any easy workaround we can apply on our side to remedy the problem temporarily?

Maybe we could drop the drive letter out of the class path on the dev mode JAR, if the drive letter matches the current drive of the user? It won't fix every case but it'll fix some anyway.

Sounds reasonable and I would assume it would address the most common case.

Allegedly System.getenv("SystemDrive") will yield that info.

@jaikiran would you like to give @dmlloyd 's suggestion a shot?

@geoand - Yes, I'm experimenting a few ways to get past this, one of them being what @dmlloyd just suggested :) I'll update this thread once I have something.

Great, thanks!

@dmlloyd @geoand I decided to go a different approach in fixing this, instead of using the SystemDrive value to decide whether or not to write out the classpathe entries. Given that the real issue is in JDK, plus the fact that using the SystemDrive approach wasn't foolproof (like David already noted), I thought it's better to go with the approach that I propose in https://github.com/quarkusio/quarkus/pull/4527

To summarize the change in that PR - we know that the jar which is causing JDK to run into issues, is the -dev.jar - the one we generate to launch the dev mode JVM. This jar doesn't really have to be added back to the hot deployment compile classpath for reasons I note in the comments of the fix https://github.com/quarkusio/quarkus/pull/4527/files#diff-a9c77c080d4af4da4fb5436598bb7539R104

So this one should be fixed now, hopefully.

I'm closing it, please reopen if 0.25.0 is (again) not fixing your issue.

Thanks everyone.

Just tested 0.25.0 and the issue is still there with JDK11:
java.nio.file.InvalidPathException: Illegal char <:> at index 2: /C:/Users/rik/.m2/repository/javax/inject/javax.inject/1/javax.inject-1.jar
It is however fixed for JDK8...

I submitted a JDK bug for the issue where it can't understand drive letters in the URI. I don't have a bug ID yet though.

@rikcarve, that's not good :( Can you please paste the stacktrace and a few more details about which Windows OS and what command you use to trigger the build?

Sure, here we go.
OS: Windows 10 Pro 1903
Maven 3.6.2
Java: AdoptOpenJDK 11.0.4+11

mvn clean compile quarkus:dev

Stacktrace:

java.nio.file.InvalidPathException: Illegal char <:> at index 2: /C:/Users/rik/.m2/repository/javax/inject/javax.inject/1/javax.inject-1.jar
    at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
    at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
    at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
    at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
    at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229)
    at jdk.compiler/com.sun.tools.javac.file.FSInfo.getJarClassPath(FSInfo.java:112)
    at jdk.compiler/com.sun.tools.javac.file.CacheFSInfo.getJarClassPath(CacheFSInfo.java:93)
    at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addJarClassPath(Locations.java:423)
    at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFile(Locations.java:413)
    at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFiles(Locations.java:345)
    at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFiles(Locations.java:352)
    at jdk.compiler/com.sun.tools.javac.file.Locations$SimpleLocationHandler.setPaths(Locations.java:724)
    at jdk.compiler/com.sun.tools.javac.file.Locations.setLocation(Locations.java:2098)
    at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.setLocation(JavacFileManager.java:927)
    at io.quarkus.dev.JavaCompilationProvider.compile(JavaCompilationProvider.java:48)
    at io.quarkus.dev.ClassLoaderCompiler.compile(ClassLoaderCompiler.java:180)
    at io.quarkus.dev.RuntimeUpdatesProcessor.checkForChangedClasses(RuntimeUpdatesProcessor.java:185)
    at io.quarkus.dev.RuntimeUpdatesProcessor.doScan(RuntimeUpdatesProcessor.java:120)
    at io.quarkus.vertx.http.deployment.devmode.VertxHotReplacementSetup$1.handle(VertxHotReplacementSetup.java:52)
    at io.quarkus.vertx.http.deployment.devmode.VertxHotReplacementSetup$1.handle(VertxHotReplacementSetup.java:44)
    at io.vertx.core.impl.ContextImpl.lambda$executeBlocking$2(ContextImpl.java:316)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.base/java.lang.Thread.run(Thread.java:834)

The manifest inside the quarkus-dev.jar looks like this:
Manifest-Version: 1.0
Class-Path: /C:/Users/rik/.m2/repository/javax/inject/javax.inject/1/jav
ax.inject-1.jar /C:/Users/rik/.m2/repository/javax/annotation/javax.ann

So I guess it is still somehow added to the hotdeploy classpath.

The manifest inside the quarkus-dev.jar

This is the jar that's getting generated during the build in the target directory of your project? What is the full directory path where your project is located? Are any symlinks present in this path?

c:\Users\rik\dev\github\rikcarve\quarkus>

No symlink, just the standard Users directory

Edit: I even moved the project directory and the maven repo to a newly created path and it still fails.

Just to make things more difficult (maybe)... I've tried both JDK11 and 12.0.1 and using 0.25.0 neither is causing this issue for me anymore. This is using the latest getting-started and making some changes, now works fine 😄 (it doesn't if I change back to 0.24.0).

Java Versions:

openjdk version "12.0.1" 2019-04-16
OpenJDK Runtime Environment (build 12.0.1+12)
OpenJDK 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)

openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

Weird, just newly cloned the latest getting-started, ran "mvn clean compile quarkus:dev" made a change to the GettingResource.java --> hot deploy failed

@rikcarve, How easy or difficult will it be for you to build a custom quarkus locally and then use it to run this app against and get us some logs? I can provide you a repo/branch with some additional debugging log statements which might help us narrow this issue down. I'm glad that the issue was solved for @CSTDev so I think we might have something specific that we need to handle in your case too and would like to understand what that is.

@rikcarve Actually, you know what - would it possibel for you to share the -dev.jar that is generated in your target directory somehow? Attach it to this issue or perhaps upload it somewhere and point me to it?

Ok, I will try that:

quarkus-dev.zip

Hope this helps. I also started mvn with -X to get the debug logs and I could not see the message

Thank you for that jar. Based on what I see in the data that's available in it, the location of the runner jar is being considered as c:/dev/target/quarkus-dev.jar? Is that the correct location from where you are running this project?

The next step to do (without changing the location of the project) is to add the following logger configuration in your application.properties and rerun the mvn quarkus:dev and get us the C:\quarkus.log file, please:

quarkus.log.file.enable=true
quarkus.log.file.path=C:/quarkus.log
quarkus.log.file.level=TRACE
quarkus.log.file.format=%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n
quarkus.log.category."io.quarkus.dev".level=TRACE
quarkus.log.category."io.quarkus.maven".level=TRACE

Please attach the pom.xml that you are using.

I know this is turning into a debug session, so thank you for being patient. Hopefully we will know what's going on.

So one interesting thing that I had noticed in your comment as well as the jar that you uploaded was that the data embedded into the jar suggests that the drive letter is c: (lower case). It also matches with the post comments that you have posted so far, of your directory paths. However, looking at one of the MANIFEST.MF entry that you have pasted, it uses C:\ (upper case). The entries in the manifest itself is not something I'm interested in, but that probably is an hint that there's some kind of case sensitivity thing going on with drive letters on your system and is causing this check to fail in our code:

if (devModeRunnerJarAbsolutePath != null && file.getAbsolutePath().equals(devModeRunnerJarAbsolutePath)) {

This is just a guess at this point and I don't know if it's valid. I need to understand why/if, on Windows, such case sensitivity can arise when dealing with java.net.URI/URL.

Interesting observation!
I just attached to logfile (althought I don't see any debug/trace messages?) and the pom.xml
quarkus.zip

I was reading some (java)docs of File/URL and there's a very small mention about "standard case for drive letters" on Windows OS here[1]. So it does seem that the drive letter is playing a role here. I have a fix for it here https://github.com/jaikiran/quarkus/commit/57d31637bb3d41a8785e254c21c34eaacc935003. I just need to see how to deliver that to you for a quick test with instructions.

[1] https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/File.html#getCanonicalPath()

What is the fasted way to build quarkus (without any tests) ?

What is the fasted way to build quarkus (without any tests) ?

mvn clean install -DskipTests=true

Then use 999-SNAPSHOT as the quarkus version in your application's pom.xml

If you are planning to build it off my branch here https://github.com/jaikiran/quarkus/tree/windows-path then be sure to do a:

git checkout windows-path

to switch to this branch before building.

mvn clean install -DskipTests=true -DskipITs is even better!

On Thu, Oct 17, 2019 at 2:04 PM Jaikiran notifications@github.com wrote:

What is the fasted way to build quarkus (without any tests) ?

mvn clean install -DskipTests=true

Then use 999-SNAPSHOT as the quarkus version in your application's pom.xml


You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/quarkusio/quarkus/issues/3592?email_source=notifications&email_token=AAJYOBIRMRJ46AMOCXIT76LQPBIDVA5CNFSM4INTTMQKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBP3FPI#issuecomment-543142589,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAJYOBJGOKF76SNUTORKHB3QPBIDVANCNFSM4INTTMQA
.

Building it for the first time, so it takes some time, will remove some extensions and integration-tests, please be patient with me ;-)

OK, build finished, used @jaikiran 's version and now it worked for me!
And this time I could also see the debug message for excluding the quarkus-dev jar:

2019-10-17 15:13:25,324 DEBUG [io.qua.dev.ClassLoaderCompiler] (main) Dev mode runner jar C:\dev\target\quarkus-dev.jar won't be added to compilation classpath of hot deployment

So, using getCanonicalPath() is the way to go. Thanks a lot for your support!

OK, build finished, used @jaikiran 's version and now it worked for me!

Excellent! Thank you for testing this out. I'll send a PR with that fix in a while.

The JDK bug is https://bugs.openjdk.java.net/browse/JDK-8232925 (thanks @jaikiran!)

I'm facing the same issue.
It seems this issue is already fixed, but I can't see if this fix is already in the latest release (1.0.1.Final)
Anyhow, I did build quarkus locally (using 999-SNAPSHOT), but still getting

java.nio.file.InvalidPathException: Illegal char <:> at index 2: /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-spring-web/999-SNAPSHOT/quarkus-spring-web-999-SNAPSHOT.jar at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182) at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153) at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)

Am I missing something?
(I'm using openJDK 12)

@pieterdegraeuwe can we see the full stacktrace, please?

java.nio.file.InvalidPathException: Illegal char <:> at index 2: /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-spring-web/999-SNAPSHOT/quarkus-spring-web-999-SNAPSHOT.jar at java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182) at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153) at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77) at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92) at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:229) at jdk.compiler/com.sun.tools.javac.file.FSInfo.getJarClassPath(FSInfo.java:112) at jdk.compiler/com.sun.tools.javac.file.CacheFSInfo.getJarClassPath(CacheFSInfo.java:93) at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addJarClassPath(Locations.java:420) at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFile(Locations.java:410) at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFiles(Locations.java:342) at jdk.compiler/com.sun.tools.javac.file.Locations$SearchPath.addFiles(Locations.java:349) at jdk.compiler/com.sun.tools.javac.file.Locations$SimpleLocationHandler.setPaths(Locations.java:721) at jdk.compiler/com.sun.tools.javac.file.Locations.setLocation(Locations.java:2150) at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.setLocation(JavacFileManager.java:927) at io.quarkus.dev.JavaCompilationProvider.compile(JavaCompilationProvider.java:48) at io.quarkus.dev.ClassLoaderCompiler.compile(ClassLoaderCompiler.java:188) at io.quarkus.dev.RuntimeUpdatesProcessor.checkForChangedClasses(RuntimeUpdatesProcessor.java:188) at io.quarkus.dev.RuntimeUpdatesProcessor.doScan(RuntimeUpdatesProcessor.java:123) at io.quarkus.vertx.http.deployment.devmode.VertxHotReplacementSetup$1.handle(VertxHotReplacementSetup.java:51) at io.quarkus.vertx.http.deployment.devmode.VertxHotReplacementSetup$1.handle(VertxHotReplacementSetup.java:43) at io.vertx.core.impl.ContextImpl.lambda$executeBlocking$2(ContextImpl.java:316) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.base/java.lang.Thread.run(Thread.java:835)

The manifest contains the following:
`Manifest-Version: 1.0
Class-Path: /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-spring-we
b/999-SNAPSHOT/quarkus-spring-web-999-SNAPSHOT.jar /C:/Users/Pieter/.m2
/repository/io/quarkus/quarkus-spring-di/999-SNAPSHOT/quarkus-spring-di
-999-SNAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-re
steasy-jackson/999-SNAPSHOT/quarkus-resteasy-jackson-999-SNAPSHOT.jar /
C:/Users/Pieter/.m2/repository/org/jboss/resteasy/resteasy-spring-web/4
.4.1.Final/resteasy-spring-web-4.4.1.Final.jar /C:/Users/Pieter/.m2/rep
ository/io/quarkus/quarkus-resteasy/999-SNAPSHOT/quarkus-resteasy-999-S
NAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-vertx-ht
tp/999-SNAPSHOT/quarkus-vertx-http-999-SNAPSHOT.jar /C:/Users/Pieter/.m
2/repository/io/quarkus/quarkus-resteasy-server-common/999-SNAPSHOT/qua
rkus-resteasy-server-common-999-SNAPSHOT.jar /C:/Users/Pieter/.m2/repos
itory/io/quarkus/quarkus-jackson/999-SNAPSHOT/quarkus-jackson-999-SNAPS
HOT.jar /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-vertx-core/9
99-SNAPSHOT/quarkus-vertx-core-999-SNAPSHOT.jar /C:/Users/Pieter/.m2/re
pository/io/quarkus/quarkus-resteasy-common/999-SNAPSHOT/quarkus-restea
sy-common-999-SNAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/quarkus/q
uarkus-arc/999-SNAPSHOT/quarkus-arc-999-SNAPSHOT.jar /C:/Users/Pieter/.
m2/repository/io/quarkus/quarkus-netty/999-SNAPSHOT/quarkus-netty-999-S
NAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-core/999
-SNAPSHOT/quarkus-core-999-SNAPSHOT.jar /C:/Users/Pieter/.m2/repository
/io/quarkus/arc/arc/999-SNAPSHOT/arc-999-SNAPSHOT.jar /C:/Users/Pieter/
.m2/repository/jakarta/enterprise/jakarta.enterprise.cdi-api/2.0.2/jaka
rta.enterprise.cdi-api-2.0.2.jar /C:/Users/Pieter/.m2/repository/org/sp
ringframework/spring-web/5.1.8.RELEASE/spring-web-5.1.8.RELEASE.jar /C:
/Users/Pieter/.m2/repository/org/springframework/spring-context/5.1.8.R
ELEASE/spring-context-5.1.8.RELEASE.jar /C:/Users/Pieter/.m2/repository
/org/jboss/resteasy/resteasy-jackson2-provider/4.4.1.Final/resteasy-jac
kson2-provider-4.4.1.Final.jar /C:/Users/Pieter/.m2/repository/org/jbos
s/resteasy/resteasy-core/4.4.1.Final/resteasy-core-4.4.1.Final.jar /C:/
Users/Pieter/.m2/repository/org/jboss/resteasy/resteasy-jaxb-provider/4
.4.1.Final/resteasy-jaxb-provider-4.4.1.Final.jar /C:/Users/Pieter/.m2/
repository/org/jboss/resteasy/resteasy-core-spi/4.4.1.Final/resteasy-co
re-spi-4.4.1.Final.jar /C:/Users/Pieter/.m2/repository/org/jboss/spec/j
avax/xml/bind/jboss-jaxb-api_2.3_spec/2.0.0.Final/jboss-jaxb-api_2.3_sp
ec-2.0.0.Final.jar /C:/Users/Pieter/.m2/repository/jakarta/el/jakarta.e
l-api/3.0.3/jakarta.el-api-3.0.3.jar /C:/Users/Pieter/.m2/repository/ja
karta/interceptor/jakarta.interceptor-api/1.2.5/jakarta.interceptor-api
-1.2.5.jar /C:/Users/Pieter/.m2/repository/jakarta/inject/jakarta.injec
t-api/1.0/jakarta.inject-api-1.0.jar /C:/Users/Pieter/.m2/repository/or
g/springframework/spring-aop/5.1.8.RELEASE/spring-aop-5.1.8.RELEASE.jar
/C:/Users/Pieter/.m2/repository/org/springframework/spring-beans/5.1.8
.RELEASE/spring-beans-5.1.8.RELEASE.jar /C:/Users/Pieter/.m2/repository
/org/springframework/spring-expression/5.1.8.RELEASE/spring-expression-
5.1.8.RELEASE.jar /C:/Users/Pieter/.m2/repository/org/springframework/s
pring-core/5.1.8.RELEASE/spring-core-5.1.8.RELEASE.jar /C:/Users/Pieter
/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/
2.9.10/jackson-datatype-jsr310-2.9.10.jar /C:/Users/Pieter/.m2/reposito
ry/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.10/jackson-
datatype-jdk8-2.9.10.jar /C:/Users/Pieter/.m2/repository/com/fasterxml/
jackson/module/jackson-module-parameter-names/2.9.10/jackson-module-par
ameter-names-2.9.10.jar /C:/Users/Pieter/.gradle/caches/modules-2/files
-2.1/com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider/2.10.0/caa
fe32d349f4d4f402e64833342570bcff7fd08/jackson-jaxrs-json-provider-2.10.
0.jar /C:/Users/Pieter/.gradle/caches/modules-2/files-2.1/com.fasterxml
.jackson.jaxrs/jackson-jaxrs-base/2.10.0/7486902cc1db2d61cd0d7e4a763e9f
2696c4b5a0/jackson-jaxrs-base-2.10.0.jar /C:/Users/Pieter/.gradle/cache
s/modules-2/files-2.1/com.fasterxml.jackson.module/jackson-module-jaxb-
annotations/2.10.0/413345fa3798623890e29da9000246dcfa2c07da/jackson-mod
ule-jaxb-annotations-2.10.0.jar /C:/Users/Pieter/.m2/repository/com/git
hub/fge/json-patch/1.9/json-patch-1.9.jar /C:/Users/Pieter/.m2/reposito
ry/com/github/fge/jackson-coreutils/1.6/jackson-coreutils-1.6.jar /C:/U
sers/Pieter/.m2/repository/com/fasterxml/jackson/core/jackson-databind/
2.10.0/jackson-databind-2.10.0.jar /C:/Users/Pieter/.m2/repository/io/v
ertx/vertx-web/3.8.4/vertx-web-3.8.4.jar /C:/Users/Pieter/.m2/repositor
y/io/vertx/vertx-web-common/3.8.4/vertx-web-common-3.8.4.jar /C:/Users/
Pieter/.m2/repository/io/vertx/vertx-auth-common/3.8.4/vertx-auth-commo
n-3.8.4.jar /C:/Users/Pieter/.m2/repository/io/vertx/vertx-core/3.8.4/v
ertx-core-3.8.4.jar /C:/Users/Pieter/.m2/repository/com/fasterxml/jacks
on/core/jackson-core/2.10.0/jackson-core-2.10.0.jar /C:/Users/Pieter/.m
2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.0/jack
son-annotations-2.10.0.jar /C:/Users/Pieter/.gradle/caches/modules-2/fi
les-2.1/com.google.guava/guava/28.1-jre/b0e91dcb6a44ffb6221b5027e12a5cb
34b841145/guava-28.1-jre.jar /C:/Users/Pieter/.m2/repository/io/quarkus
/security/quarkus-security/1.0.1.Final/quarkus-security-1.0.1.Final.jar
/C:/Users/Pieter/.m2/repository/io/smallrye/smallrye-config/1.4.1/smal
lrye-config-1.4.1.jar /C:/Users/Pieter/.m2/repository/org/jboss/threads
/jboss-threads/3.0.0.Final/jboss-threads-3.0.0.Final.jar /C:/Users/Piet
er/.m2/repository/org/jboss/slf4j/slf4j-jboss-logging/1.2.0.Final/slf4j
-jboss-logging-1.2.0.Final.jar /C:/Users/Pieter/.m2/repository/io/small
rye/smallrye-config-common/1.4.1/smallrye-config-common-1.4.1.jar /C:/U
sers/Pieter/.m2/repository/org/jboss/logging/jboss-logging/3.4.1.Final/
jboss-logging-3.4.1.Final.jar /C:/Users/Pieter/.m2/repository/org/jboss
/spec/javax/ws/rs/jboss-jaxrs-api_2.1_spec/2.0.1.Final/jboss-jaxrs-api_
2.1_spec-2.0.1.Final.jar /C:/Users/Pieter/.m2/repository/org/reactivest
reams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar /C:/Users/Piete
r/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakart
a.validation-api-2.0.2.jar /C:/Users/Pieter/.gradle/caches/modules-2/fi
les-2.1/org.jboss.spec.javax.annotation/jboss-annotations-api_1.3_spec/
2.0.1.Final/b3744f492ce9a65d1197a5b24645dff93fa85424/jboss-annotations-
api_1.3_spec-2.0.1.Final.jar /C:/Users/Pieter/.m2/repository/com/sun/ac
tivation/jakarta.activation/1.2.1/jakarta.activation-1.2.1.jar /C:/User
s/Pieter/.m2/repository/org/eclipse/microprofile/config/microprofile-co
nfig-api/1.3/microprofile-config-api-1.3.jar /C:/Users/Pieter/.m2/repos
itory/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotatio
n-api-1.3.5.jar /C:/Users/Pieter/.m2/repository/jakarta/ejb/jakarta.ejb
-api/3.2.6/jakarta.ejb-api-3.2.6.jar /C:/Users/Pieter/.m2/repository/or
g/eclipse/microprofile/context-propagation/microprofile-context-propaga
tion-api/1.0.1/microprofile-context-propagation-api-1.0.1.jar /C:/Users
/Pieter/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.3-b01/jaxb-r
untime-2.3.3-b01.jar /C:/Users/Pieter/.m2/repository/com/google/guava/f
ailureaccess/1.0.1/failureaccess-1.0.1.jar /C:/Users/Pieter/.m2/reposit
ory/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-wi
th-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
/C:/Users/Pieter/.gradle/caches/modules-2/files-2.1/org.checkerframewo
rk/checker-qual/2.8.1/eb2e8ab75598548cc8acf9a1ca227e480e01881e/checker-
qual-2.8.1.jar /C:/Users/Pieter/.m2/repository/org/osgi/org.osgi.annota
tion.versioning/1.0.0/org.osgi.annotation.versioning-1.0.0.jar /C:/User
s/Pieter/.m2/repository/jakarta/transaction/jakarta.transaction-api/1.3
.2/jakarta.transaction-api-1.3.2.jar /C:/Users/Pieter/.m2/repository/or
g/jboss/logmanager/jboss-logmanager-embedded/1.0.4/jboss-logmanager-emb
edded-1.0.4.jar /C:/Users/Pieter/.m2/repository/org/jboss/logging/jboss
-logging-annotations/2.1.0.Final/jboss-logging-annotations-2.1.0.Final.
jar /C:/Users/Pieter/.m2/repository/org/slf4j/slf4j-api/1.7.29/slf4j-ap
i-1.7.29.jar /C:/Users/Pieter/.m2/repository/org/graalvm/sdk/graal-sdk/
19.3.0/graal-sdk-19.3.0.jar /C:/Users/Pieter/.m2/repository/org/wildfly
/common/wildfly-common/1.5.0.Final/wildfly-common-1.5.0.Final.jar /C:/U
sers/Pieter/.m2/repository/io/vertx/vertx-bridge-common/3.8.4/vertx-bri
dge-common-3.8.4.jar /C:/Users/Pieter/.m2/repository/org/glassfish/jaxb
/txw2/2.3.3-b01/txw2-2.3.3-b01.jar /C:/Users/Pieter/.m2/repository/com/
sun/istack/istack-commons-runtime/3.0.10/istack-commons-runtime-3.0.10.
jar /C:/Users/Pieter/.m2/repository/jakarta/activation/jakarta.activati
on-api/1.2.1/jakarta.activation-api-1.2.1.jar /C:/Users/Pieter/.m2/repo
sitory/com/github/fge/msg-simple/1.1/msg-simple-1.1.jar /C:/Users/Piete
r/.m2/repository/io/netty/netty-handler-proxy/4.1.42.Final/netty-handle
r-proxy-4.1.42.Final.jar /C:/Users/Pieter/.m2/repository/io/netty/netty
-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar /C:/Users/
Pieter/.m2/repository/io/netty/netty-codec-http/4.1.42.Final/netty-code
c-http-4.1.42.Final.jar /C:/Users/Pieter/.m2/repository/io/netty/netty-
handler/4.1.42.Final/netty-handler-4.1.42.Final.jar /C:/Users/Pieter/.m
2/repository/io/netty/netty-resolver-dns/4.1.42.Final/netty-resolver-dn
s-4.1.42.Final.jar /C:/Users/Pieter/.m2/repository/io/netty/netty-codec
-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar /C:/Users/Pieter
/.m2/repository/io/netty/netty-codec-dns/4.1.42.Final/netty-codec-dns-4
.1.42.Final.jar /C:/Users/Pieter/.m2/repository/io/netty/netty-codec/4.
1.42.Final/netty-codec-4.1.42.Final.jar /C:/Users/Pieter/.m2/repository
/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar
/C:/Users/Pieter/.m2/repository/io/netty/netty-buffer/4.1.42.Final/net
ty-buffer-4.1.42.Final.jar /C:/Users/Pieter/.m2/repository/io/netty/net
ty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar /C:/Users/Piet
er/.m2/repository/io/netty/netty-common/4.1.42.Final/netty-common-4.1.4
2.Final.jar /C:/Users/Pieter/.m2/repository/com/github/fge/btf/1.2/btf-
1.2.jar /C:/Users/Pieter/.gradle/caches/modules-2/files-2.1/com.google.
errorprone/error_prone_annotations/2.3.2/d1a0c5032570e0f64be6b4d9c90cde
b103129029/error_prone_annotations-2.3.2.jar /C:/Users/Pieter/.gradle/c
aches/modules-2/files-2.1/com.google.j2objc/j2objc-annotations/1.3/ba03
5118bc8bac37d7eff77700720999acd9986d/j2objc-annotations-1.3.jar /C:/Use
rs/Pieter/.gradle/caches/modules-2/files-2.1/org.codehaus.mojo/animal-s
niffer-annotations/1.18/f7aa683ea79dc6681ee9fb95756c999acbb62f5d/animal
-sniffer-annotations-1.18.jar /C:/Users/Pieter/.m2/repository/io/quarku
s/quarkus-spring-web-deployment/999-SNAPSHOT/quarkus-spring-web-deploym
ent-999-SNAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus
-spring-di-deployment/999-SNAPSHOT/quarkus-spring-di-deployment-999-SNA
PSHOT.jar /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-resteasy-j
ackson-deployment/999-SNAPSHOT/quarkus-resteasy-jackson-deployment-999-
SNAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-resteas
y-deployment/999-SNAPSHOT/quarkus-resteasy-deployment-999-SNAPSHOT.jar
/C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-vertx-http-deploymen
t/999-SNAPSHOT/quarkus-vertx-http-deployment-999-SNAPSHOT.jar /C:/Users
/Pieter/.m2/repository/io/quarkus/quarkus-resteasy-server-common-deploy
ment/999-SNAPSHOT/quarkus-resteasy-server-common-deployment-999-SNAPSHO
T.jar /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-jackson-deploy
ment/999-SNAPSHOT/quarkus-jackson-deployment-999-SNAPSHOT.jar /C:/Users
/Pieter/.m2/repository/io/quarkus/quarkus-vertx-core-deployment/999-SNA
PSHOT/quarkus-vertx-core-deployment-999-SNAPSHOT.jar /C:/Users/Pieter/.
m2/repository/io/quarkus/quarkus-resteasy-common-deployment/999-SNAPSHO
T/quarkus-resteasy-common-deployment-999-SNAPSHOT.jar /C:/Users/Pieter/
.m2/repository/io/quarkus/quarkus-netty-deployment/999-SNAPSHOT/quarkus
-netty-deployment-999-SNAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/q
uarkus/quarkus-arc-deployment/999-SNAPSHOT/quarkus-arc-deployment-999-S
NAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-resteasy
-common-spi/999-SNAPSHOT/quarkus-resteasy-common-spi-999-SNAPSHOT.jar /
C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-undertow-spi/999-SNAP
SHOT/quarkus-undertow-spi-999-SNAPSHOT.jar /C:/Users/Pieter/.m2/reposit
ory/io/quarkus/quarkus-security-spi/999-SNAPSHOT/quarkus-security-spi-9
99-SNAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-kube
rnetes-spi/999-SNAPSHOT/quarkus-kubernetes-spi-999-SNAPSHOT.jar /C:/Use
rs/Pieter/.m2/repository/io/quarkus/quarkus-resteasy-server-common-spi/
999-SNAPSHOT/quarkus-resteasy-server-common-spi-999-SNAPSHOT.jar /C:/Us
ers/Pieter/.m2/repository/io/quarkus/quarkus-jackson-spi/999-SNAPSHOT/q
uarkus-jackson-spi-999-SNAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/
quarkus/quarkus-core-deployment/999-SNAPSHOT/quarkus-core-deployment-99
9-SNAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/quarkus/arc/arc-proce
ssor/999-SNAPSHOT/arc-processor-999-SNAPSHOT.jar /C:/Users/Pieter/.m2/r
epository/io/quarkus/quarkus-builder/999-SNAPSHOT/quarkus-builder-999-S
NAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/quarkus/gizmo/gizmo/1.0.
0.Final/gizmo-1.0.0.Final.jar /C:/Users/Pieter/.m2/repository/org/jboss
/jandex/2.1.2.Final/jandex-2.1.2.Final.jar /C:/Users/Pieter/.m2/reposit
ory/org/ow2/asm/asm-util/7.1/asm-util-7.1.jar /C:/Users/Pieter/.m2/repo
sitory/org/ow2/asm/asm-analysis/7.1/asm-analysis-7.1.jar /C:/Users/Piet
er/.m2/repository/org/ow2/asm/asm-tree/7.1/asm-tree-7.1.jar /C:/Users/P
ieter/.m2/repository/org/ow2/asm/asm/7.1/asm-7.1.jar /C:/Users/Pieter/.
m2/repository/io/quarkus/quarkus-bootstrap-core/999-SNAPSHOT/quarkus-bo
otstrap-core-999-SNAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/quarku
s/http/quarkus-http-servlet/3.0.0.Final/quarkus-http-servlet-3.0.0.Fina
l.jar /C:/Users/Pieter/.m2/repository/jakarta/servlet/jakarta.servlet-a
pi/4.0.3/jakarta.servlet-api-4.0.3.jar /C:/Users/Pieter/.m2/repository/
org/jboss/metadata/jboss-metadata-web/11.0.0.Final/jboss-metadata-web-1
1.0.0.Final.jar /C:/Users/Pieter/.m2/repository/org/jboss/logging/commo
ns-logging-jboss-logging/1.0.0.Final/commons-logging-jboss-logging-1.0.
0.Final.jar /C:/Users/Pieter/.m2/repository/io/quarkus/http/quarkus-htt
p-core/3.0.0.Final/quarkus-http-core-3.0.0.Final.jar /C:/Users/Pieter/.
m2/repository/io/quarkus/http/quarkus-http-http-core/3.0.0.Final/quarku
s-http-http-core-3.0.0.Final.jar /C:/Users/Pieter/.m2/repository/org/ap
ache/maven/maven-embedder/3.5.4/maven-embedder-3.5.4.jar /C:/Users/Piet
er/.m2/repository/org/apache/maven/maven-core/3.5.4/maven-core-3.5.4.ja
r /C:/Users/Pieter/.m2/repository/org/apache/maven/maven-resolver-provi
der/3.5.4/maven-resolver-provider-3.5.4.jar /C:/Users/Pieter/.m2/reposi
tory/org/apache/maven/maven-model-builder/3.5.4/maven-model-builder-3.5
.4.jar /C:/Users/Pieter/.gradle/caches/modules-2/files-2.1/com.google.i
nject/guice/4.2.0/290829830dcba649f8bdeeed081839f8fbe6dac6/guice-4.2.0-
no_aop.jar /C:/Users/Pieter/.m2/repository/org/apache/maven/maven-setti
ngs-builder/3.5.4/maven-settings-builder-3.5.4.jar /C:/Users/Pieter/.m2
/repository/org/apache/maven/maven-plugin-api/3.5.4/maven-plugin-api-3.
5.4.jar /C:/Users/Pieter/.m2/repository/org/apache/maven/maven-model/3.
5.4/maven-model-3.5.4.jar /C:/Users/Pieter/.m2/repository/org/apache/ma
ven/maven-builder-support/3.5.4/maven-builder-support-3.5.4.jar /C:/Use
rs/Pieter/.m2/repository/org/apache/maven/maven-artifact/3.5.4/maven-ar
tifact-3.5.4.jar /C:/Users/Pieter/.m2/repository/org/apache/commons/com
mons-lang3/3.9/commons-lang3-3.9.jar /C:/Users/Pieter/.m2/repository/or
g/apache/maven/resolver/maven-resolver-connector-basic/1.1.1/maven-reso
lver-connector-basic-1.1.1.jar /C:/Users/Pieter/.m2/repository/org/apac
he/maven/resolver/maven-resolver-transport-wagon/1.1.1/maven-resolver-t
ransport-wagon-1.1.1.jar /C:/Users/Pieter/.m2/repository/org/apache/mav
en/wagon/wagon-http/3.0.0/wagon-http-3.0.0.jar /C:/Users/Pieter/.m2/rep
ository/org/apache/maven/wagon/wagon-file/3.0.0/wagon-file-3.0.0.jar /C
:/Users/Pieter/.m2/repository/org/apache/maven/wagon/wagon-http-shared/
3.0.0/wagon-http-shared-3.0.0.jar /C:/Users/Pieter/.m2/repository/org/j
boss/spec/javax/annotation/jboss-annotations-api_1.2_spec/1.0.2.Final/j
boss-annotations-api_1.2_spec-1.0.2.Final.jar /C:/Users/Pieter/.m2/repo
sitory/org/jboss/metadata/jboss-metadata-common/11.0.0.Final/jboss-meta
data-common-11.0.0.Final.jar /C:/Users/Pieter/.m2/repository/org/apache
/maven/maven-settings/3.5.4/maven-settings-3.5.4.jar /C:/Users/Pieter/.
m2/repository/org/apache/maven/resolver/maven-resolver-impl/1.1.1/maven
-resolver-impl-1.1.1.jar /C:/Users/Pieter/.m2/repository/org/apache/mav
en/resolver/maven-resolver-util/1.1.1/maven-resolver-util-1.1.1.jar /C:
/Users/Pieter/.m2/repository/org/apache/maven/resolver/maven-resolver-s
pi/1.1.1/maven-resolver-spi-1.1.1.jar /C:/Users/Pieter/.m2/repository/o
rg/apache/maven/resolver/maven-resolver-api/1.1.1/maven-resolver-api-1.
1.1.jar /C:/Users/Pieter/.m2/repository/org/apache/maven/shared/maven-s
hared-utils/3.2.1/maven-shared-utils-3.2.1.jar /C:/Users/Pieter/.m2/rep
ository/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.3/org.eclipse.sisu
.plexus-0.3.3.jar /C:/Users/Pieter/.m2/repository/org/sonatype/plexus/p
lexus-sec-dispatcher/1.4/plexus-sec-dispatcher-1.4.jar /C:/Users/Pieter
/.m2/repository/org/apache/maven/maven-repository-metadata/3.5.4/maven-
repository-metadata-3.5.4.jar /C:/Users/Pieter/.m2/repository/org/apach
e/maven/wagon/wagon-provider-api/3.0.0/wagon-provider-api-3.0.0.jar /C:
/Users/Pieter/.m2/repository/org/codehaus/plexus/plexus-utils/3.1.0/ple
xus-utils-3.1.0.jar /C:/Users/Pieter/.m2/repository/org/codehaus/plexus
/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar /C:/Users/Pieter
/.m2/repository/org/codehaus/plexus/plexus-component-annotations/1.7.1/
plexus-component-annotations-1.7.1.jar /C:/Users/Pieter/.m2/repository/
commons-cli/commons-cli/1.4/commons-cli-1.4.jar /C:/Users/Pieter/.m2/re
pository/org/codehaus/plexus/plexus-interpolation/1.24/plexus-interpola
tion-1.24.jar /C:/Users/Pieter/.m2/repository/org/apache/httpcomponents
/httpclient/4.5.3/httpclient-4.5.3.jar /C:/Users/Pieter/.m2/repository/
org/apache/httpcomponents/httpcore/4.4.6/httpcore-4.4.6.jar /C:/Users/P
ieter/.m2/repository/javax/enterprise/cdi-api/2.0.SP1/cdi-api-2.0.SP1.j
ar /C:/Users/Pieter/.m2/repository/com/google/code/findbugs/jsr305/3.0.
2/jsr305-3.0.2.jar /C:/Users/Pieter/.m2/repository/commons-io/commons-i
o/2.5/commons-io-2.5.jar /C:/Users/Pieter/.m2/repository/aopalliance/ao
palliance/1.0/aopalliance-1.0.jar /C:/Users/Pieter/.m2/repository/org/s
onatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4.jar /C:/Users/Pieter
/.m2/repository/org/jsoup/jsoup/1.7.2/jsoup-1.7.2.jar /C:/Users/Pieter/
.m2/repository/commons-codec/commons-codec/1.9/commons-codec-1.9.jar /C
:/Users/Pieter/.m2/repository/javax/el/javax.el-api/3.0.0/javax.el-api-
3.0.0.jar /C:/Users/Pieter/.m2/repository/javax/interceptor/javax.inter
ceptor-api/1.2/javax.interceptor-api-1.2.jar /C:/Users/Pieter/.m2/repos
itory/javax/inject/javax.inject/1/javax.inject-1.jar /F:/projects/GEO-D
esk-playground/services/test-api/build/wiring-classes// /C:/Users/Piete
r/.m2/repository/io/quarkus/quarkus-gradle-plugin/999-SNAPSHOT/quarkus-
gradle-plugin-999-SNAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/quark
us/quarkus-bom/999-SNAPSHOT/quarkus-bom-999-SNAPSHOT.pom /C:/Users/Piet
er/.m2/repository/io/quarkus/quarkus-bom-deployment/999-SNAPSHOT/quarku
s-bom-deployment-999-SNAPSHOT.pom /C:/Users/Pieter/.m2/repository/io/qu
arkus/quarkus-platform-descriptor-json/999-SNAPSHOT/quarkus-platform-de
scriptor-json-999-SNAPSHOT.jar /C:/Users/Pieter/.m2/repository/com/goog
le/guava/guava/27.0.1-jre/guava-27.0.1-jre.jar /C:/Users/Pieter/.m2/rep
ository/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar
/C:/Users/Pieter/.m2/repository/com/google/errorprone/error_prone_annot
ations/2.2.0/error_prone_annotations-2.2.0.jar /C:/Users/Pieter/.m2/rep
ository/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1
.jar /C:/Users/Pieter/.m2/repository/org/codehaus/mojo/animal-sniffer-a
nnotations/1.17/animal-sniffer-annotations-1.17.jar /C:/Users/Pieter/.m
2/repository/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.3/org.eclipse
.sisu.inject-0.3.3.jar /C:/Users/Pieter/.m2/repository/javax/enterprise
/cdi-api/1.0/cdi-api-1.0.jar /C:/Users/Pieter/.m2/repository/javax/anno
tation/jsr250-api/1.0/jsr250-api-1.0.jar /C:/Users/Pieter/.m2/repositor
y/io/quarkus/quarkus-devtools-common/999-SNAPSHOT/quarkus-devtools-comm
on-999-SNAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-
platform-descriptor-api/999-SNAPSHOT/quarkus-platform-descriptor-api-99
9-SNAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/quarkus/http/quarkus-
http-websockets-jsr/3.0.0.Beta1/quarkus-http-websockets-jsr-3.0.0.Beta1
.jar /C:/Users/Pieter/.m2/repository/io/quarkus/http/quarkus-http-servl
et/3.0.0.Beta1/quarkus-http-servlet-3.0.0.Beta1.jar /C:/Users/Pieter/.m
2/repository/io/quarkus/http/quarkus-http-core/3.0.0.Beta1/quarkus-http
-core-3.0.0.Beta1.jar /C:/Users/Pieter/.m2/repository/io/quarkus/http/q
uarkus-http-http-core/3.0.0.Beta1/quarkus-http-http-core-3.0.0.Beta1.ja
r /C:/Users/Pieter/.m2/repository/io/netty/netty-buffer/4.1.34.Final/ne
tty-buffer-4.1.34.Final.jar /C:/Users/Pieter/.m2/repository/io/netty/ne
tty-common/4.1.34.Final/netty-common-4.1.34.Final.jar /C:/Users/Pieter/
.m2/repository/io/netty/netty-codec-http/4.1.34.Final/netty-codec-http-
4.1.34.Final.jar /C:/Users/Pieter/.m2/repository/io/netty/netty-handler
/4.1.34.Final/netty-handler-4.1.34.Final.jar /C:/Users/Pieter/.m2/repos
itory/io/netty/netty-codec/4.1.34.Final/netty-codec-4.1.34.Final.jar /C
:/Users/Pieter/.m2/repository/io/netty/netty-transport/4.1.34.Final/net
ty-transport-4.1.34.Final.jar /C:/Users/Pieter/.m2/repository/io/netty/
netty-resolver/4.1.34.Final/netty-resolver-4.1.34.Final.jar /C:/Users/P
ieter/.m2/repository/org/jboss/spec/javax/websocket/jboss-websocket-api
_1.1_spec/1.1.4.Final/jboss-websocket-api_1.1_spec-1.1.4.Final.jar /C:/
Users/Pieter/.m2/repository/jakarta/websocket/jakarta.websocket-api/1.1
.2/jakarta.websocket-api-1.1.2.jar /C:/Users/Pieter/.m2/repository/com/
fasterxml/jackson/core/jackson-databind/2.9.10.1/jackson-databind-2.9.1
0.1.jar /C:/Users/Pieter/.m2/repository/com/fasterxml/jackson/core/jack
son-annotations/2.9.10/jackson-annotations-2.9.10.jar /C:/Users/Pieter/
.m2/repository/com/fasterxml/jackson/core/jackson-core/2.9.10/jackson-c
ore-2.9.10.jar /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-bom-d
escriptor-json/999-SNAPSHOT/quarkus-bom-descriptor-json-999-SNAPSHOT.js
on /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-development-mode/
999-SNAPSHOT/quarkus-development-mode-999-SNAPSHOT.jar /C:/Users/Pieter
/.m2/repository/io/quarkus/quarkus-creator/999-SNAPSHOT/quarkus-creator
-999-SNAPSHOT.jar /C:/Users/Pieter/.m2/repository/io/quarkus/quarkus-pl
atform-descriptor-resolver-json/999-SNAPSHOT/quarkus-platform-descripto
r-resolver-json-999-SNAPSHOT.jar /C:/Users/Pieter/.m2/repository/com/ec
lipsesource/minimal-json/minimal-json/0.9.5/minimal-json-0.9.5.jar
Main-Class: io.quarkus.dev.DevModeMain

`

Which should not contain the '/' at each filepath, no?

Hello @pieterdegraeuwe,

Those entries in the Manifest file are "fine" (at least in the context of what we are seeing here). In 1.0.1.Final, we fixed this in a different way by not including this jar file in the list of jar files that we pass to the programatic compilation API.

Can you get us the DEBUG level logs of io.quarkus.dev package?

Hello @pieterdegraeuwe, I just noticed that you mentioned you are using 999-SNAPSHOT of Quarkus. If that's the case, then the entries in the Manifest file should actually be file scheme absolute URLs. Are you sure the 999-SNAPSHOT is actually the latest one from master? How did you build it and what does your pom.xml look like?

the pom.xml of the quarkus-parent shows this:
io.quarkus
quarkus-parent
Quarkus - Parent pom
999-SNAPSHOT
pom

and, yes, I did checkout from the master

this is the current logging:
2019-12-06 14:36:27,109 INFO [io.quarkus] (main) Quarkus 999-SNAPSHOT started in 1.969s. Listening on: http://0.0.0.0:8080
2019-12-06 14:36:27,112 INFO [io.quarkus] (main) Profile dev activated. Live Coding activated.
2019-12-06 14:36:27,112 INFO [io.quarkus] (main) Installed features: [cdi, resteasy, resteasy-jackson, spring-di, spring-web]
2019-12-06 14:38:04,477 INFO [io.qua.dev] (vert.x-worker-thread-2) Changed source files detected, recompiling [F:\projects\GEO-Desk-playground\services\test-api\src\main\java\be\geodesk\ExampleResource.java]

(at this time it seems it's only INFO. so I probably didn't configure it correctly)

consoleoutput.log

The last loging '!!!!! is something of me, I've added in the JavaCompilationProvider, just before fileManager.setLocation(...) is called

I see what's happening. So you are using Gradle and looks like we missed adding these fixes into the Gradle plugins and just focused on Maven (ouch!). I'll send a PR.

Hello @pieterdegraeuwe, I've opened https://github.com/quarkusio/quarkus/pull/5988. If you can give it a try against your setup and see how it goes, that would be helpful.

Ok, I'll give it a try. I'll keep you posted!

PR does not fix it.
To be honest, I don't underdstand what this PR should fix. It sets now the jarfile on the DevModeContext.
I see that the ClassLoaderCompiler checks for this file.

However, the error occurs BEFORE the compilation is comilation is started.: In JavaCompilationProvider:48 (setLocation)

Can you attach/share the generated -dev.jar file with this change introduced in the PR?

To be honest, I don't underdstand what this PR should fix
It does 2 things:

  1. The newly generated -dev.jar should now contain absolute file: URLs for Class-Path entries.
  2. It makes sure that the -dev.jar file isn't passed to the programatic Java compilation APIs.

I see that the ClassLoaderCompiler checks for this file.

However, the error occurs BEFORE the compilation is comilation is started.: In JavaCompilationProvider:48 (setLocation)

The setLocation uses a bunch of classpath jars to set, obtained via context.getClasspath(). The ClassLoaderCompiler ensures that the return value of context.getClasspath() doesn't include the -dev.jar file.

test-api-unspecified-dev.zip

The manifest does not contain file: urls.

The manifest does not contain file: urls.

I'm guessing the latest gradle plugin (with this code change) didn't get used to build this jar. I'm not saying you didn't build the latest, but I'm just not sure the gradle plugin used during this application build is the one which has the fix.

You are correct.
It took me a while to find out why my locally built plugin was not used.
It seems that the name of the plugin did change (recently).

I've generated my testproject on code.quarkus.io. (as a gradle project).
the build.gradle does contain this:

buildscript {
    repositories {
        mavenLocal()
    }
    dependencies {
        classpath "io.quarkus:quarkus-gradle-plugin:${quarkusPluginVersion}"
    }
}

Looking at the installed artifacts when I was building quarkus locally, I saw (after a while) a subtle difference in the artifactname: It was installing now io.quarkus:io.quarkus.gradle.plugin instead of
io.quarkus:quarkus-gradle-plugin (note the extra 'io.' in the artifactid)

So, I quess I't a good idea to fix the project generator on code.quarkus.io ;-)

Anyhow. Thank you for helping me out!

Hello @pieterdegraeuwe, thank you for reporting this and verifying the fix. The PR has been merged and the fix should be available in next Quarkus release.

As for the artifact id change for the gradle plugin, I've pinged the relevant developers so that they can help with whatever is needed to update code.quarkus.io.

Was this page helpful?
0 / 5 - 0 ratings