diff --git a/pom.xml b/pom.xml
index 99f0b2f5f..99ebd0642 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
io.github.classgraph
classgraph
- 4.8.109-SNAPSHOT
+ 4.8.108-itm
ClassGraph
The uber-fast, ultra-lightweight classpath and module scanner for JVM languages.
diff --git a/src/main/java/nonapi/io/github/classgraph/classloaderhandler/QuarkusClassLoaderHandler.java b/src/main/java/nonapi/io/github/classgraph/classloaderhandler/QuarkusClassLoaderHandler.java
index a057642eb..01e8ac326 100644
--- a/src/main/java/nonapi/io/github/classgraph/classloaderhandler/QuarkusClassLoaderHandler.java
+++ b/src/main/java/nonapi/io/github/classgraph/classloaderhandler/QuarkusClassLoaderHandler.java
@@ -28,15 +28,16 @@
*/
package nonapi.io.github.classgraph.classloaderhandler;
-import java.nio.file.Path;
-import java.util.Collection;
-
import nonapi.io.github.classgraph.classpath.ClassLoaderOrder;
import nonapi.io.github.classgraph.classpath.ClasspathOrder;
import nonapi.io.github.classgraph.scanspec.ScanSpec;
import nonapi.io.github.classgraph.utils.LogNode;
import nonapi.io.github.classgraph.utils.ReflectionUtils;
+import java.nio.file.Path;
+import java.util.Collection;
+import java.util.Map;
+
/**
* Extract classpath entries from the Quarkus ClassLoader.
*/
@@ -47,6 +48,9 @@ class QuarkusClassLoaderHandler implements ClassLoaderHandler {
// Classloader since Quarkus 1.3
private static final String QUARKUS_CLASSLOADER = "io.quarkus.bootstrap.classloading.QuarkusClassLoader";
+ // Classloader since Quarkus 1.13
+ private static final String RUNNER_CLASSLOADER = "io.quarkus.bootstrap.runner.RunnerClassLoader";
+
/**
* Class cannot be constructed.
*/
@@ -64,7 +68,8 @@ private QuarkusClassLoaderHandler() {
*/
public static boolean canHandle(final Class> classLoaderClass, final LogNode log) {
return RUNTIME_CLASSLOADER.equals(classLoaderClass.getName())
- || QUARKUS_CLASSLOADER.equals(classLoaderClass.getName());
+ || QUARKUS_CLASSLOADER.equals(classLoaderClass.getName())
+ || RUNNER_CLASSLOADER.equals(classLoaderClass.getName());
}
/**
@@ -103,6 +108,8 @@ public static void findClasspathOrder(final ClassLoader classLoader, final Class
findClasspathOrderForRuntimeClassloader(classLoader, classpathOrder, scanSpec, log);
} else if (QUARKUS_CLASSLOADER.equals(classLoaderName)) {
findClasspathOrderForQuarkusClassloader(classLoader, classpathOrder, scanSpec, log);
+ } else if (RUNNER_CLASSLOADER.equals(classLoaderName)) {
+ findClasspathOrderForRunnerClassloader(classLoader, classpathOrder, scanSpec, log);
}
}
@@ -133,4 +140,19 @@ private static void findClasspathOrderForRuntimeClassloader(final ClassLoader cl
}
}
}
+
+ @SuppressWarnings("unchecked")
+ private static void findClasspathOrderForRunnerClassloader(final ClassLoader classLoader,
+ final ClasspathOrder classpathOrder, final ScanSpec scanSpec, final LogNode log) {
+ for (final Object[] elementArray : ((Map) ReflectionUtils.getFieldVal(classLoader,
+ "resourceDirectoryMap", false)).values()) {
+ for (Object element : elementArray) {
+ final String elementClassName = element.getClass().getName();
+ if ("io.quarkus.bootstrap.runner.JarResource".equals(elementClassName)) {
+ classpathOrder.addClasspathEntry(ReflectionUtils.getFieldVal(element, "jarPath", false),
+ classLoader, scanSpec, log);
+ }
+ }
+ }
+ }
}