Skip to content

Commit

Permalink
Merge pull request #532 from itmrat01/latest
Browse files Browse the repository at this point in the history
[ICO-XXX] Add class loader handler for quarkus 1.13.3
  • Loading branch information
lukehutch committed Jul 1, 2021
2 parents 19669b0 + 05988ca commit 1ca58ac
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 5 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -3,7 +3,7 @@

<groupId>io.github.classgraph</groupId>
<artifactId>classgraph</artifactId>
<version>4.8.109-SNAPSHOT</version>
<version>4.8.108-itm</version>
<name>ClassGraph</name>

<description>The uber-fast, ultra-lightweight classpath and module scanner for JVM languages.</description>
Expand Down
Expand Up @@ -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.
*/
Expand All @@ -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.
*/
Expand All @@ -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());
}

/**
Expand Down Expand Up @@ -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);
}
}

Expand Down Expand Up @@ -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<String, Object[]>) 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);
}
}
}
}
}

0 comments on commit 1ca58ac

Please sign in to comment.