From b8cc7e92edd72f7d2da77595f669c7d485b24eb7 Mon Sep 17 00:00:00 2001 From: itmrat01 Date: Thu, 1 Jul 2021 11:23:09 +0200 Subject: [PATCH 1/2] [ICO-XXX] Add class loader handler for quarkus 1.13.3 --- pom.xml | 2 +- .../QuarkusClassLoaderHandler.java | 30 ++++++++++++++++--- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 99f0b2f5f..71f34746a 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ io.github.classgraph classgraph - 4.8.109-SNAPSHOT + 4.8.109-itm-SNAPSHOT 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); + } + } + } + } } From 05988cab16e96795cf8cb774cb18e71508ed6ab9 Mon Sep 17 00:00:00 2001 From: itmrat01 Date: Thu, 1 Jul 2021 12:36:42 +0200 Subject: [PATCH 2/2] [ICO-XXX] New version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 71f34746a..99ebd0642 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ io.github.classgraph classgraph - 4.8.109-itm-SNAPSHOT + 4.8.108-itm ClassGraph The uber-fast, ultra-lightweight classpath and module scanner for JVM languages.