'java.lang.ClassNotFoundException: io.quarkus.runtime.Quarkus

I am trying to run runner jar of the quarkus application which would be listening over port 9411 on http.

Programmatically using UrlClassLoader, when I try to load the jar it throws (also with java -jar) 1.java.lang.ClassNotFoundException: io.quarkus.runtime.Quarkus

2.java.lang.reflect.InvocationTargetException here is the snippet of code ,

        URLClassLoader loader = new URLClassLoader(
            new URL[]{ new File(<location of runner jar>).toURI().toURL()});
        Thread.currentThread().setContextClassLoader(loader);
        Class<?> mainClass = loader.loadClass("io.quarkus.runner.GeneratedMain"); 
        Method mainMethod = mainClass.getMethod("main", String[].class);
        mainMethod.invoke(null, (Object) new String[]{});

another observation is when I place /lib folder at the runner jar location it loads successfully meaning it requires the lib folder altogether.

How can I make my code work only with runner jar?



Solution 1:[1]

To produce a fat jar that includes all the libraries necessary to run the app, use the property quarkus.package.uber-jar=true (you can add that into src/main/resources/application.properties or pass it as a system property when running the build).

Solution 2:[2]

With mvn clean package I got the following error starting:

 Unrecognized configuration key "quarkus.package.uber-jar" was provided

I've found

 quarkus.package.type=uber-jar 

as a property.

What I prefer is setting

 <quarkus.package.type>uber-jar</quarkus.package.type>

in the pom properties.

https://github.com/fluentcodes/sandbox/tree/java-quarkus-empty

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Jan Martiška
Solution 2 Werner Diwischek