Skip to content

[GR-53978] Class graph unable to load classes with GraalVM JDK21 #8884

Open
@anshu-zs

Description

@anshu-zs

Hi I am trying to initialize ClassScanner at build time, but it's not able to load classes

Here is my classScanner:

public class ClassScanner {
    private static ScanResult scanResult;

    static {
        scanResult = new ClassGraph().disableModuleScanning() // added for GraalVM
                 .disableDirScanning() // added for GraalVM
                 .disableNestedJarScanning() // added for GraalVM
                 .disableRuntimeInvisibleAnnotations() // added for GraalVM
                .addClassLoader(ClassLoader.getSystemClassLoader()) // see
                .enableAnnotationInfo().enableMethodInfo().initializeLoadedClasses().scan();
    }
    
        public Set<Class> findAllClassesImplementingInterfaces(Class interfaceName) {
        Set<Class> classSet = new HashSet<>();
        ClassInfoList classInfos = scanResult.getClassesImplementing(interfaceName);
        for (ClassInfo clazz : classInfos) {
            classSet.add(clazz.loadClass());
        }
        System.out.println("ScanResult:   "+classSet);
        return classSet;
    }

ClassScanner usage

ClassScanner classScanner =new ClassScanner();
classScanner.findAllClassesImplementingInterfaces(IContext.class)

Here are the logs when I run the native image:

INFO [17:48:16]  Default properties successfully read. 
      (Memory: 2621440 Threads: 2)
INFO [17:48:16]  Loaded config from file: .env 
      (Memory: 3145728 Threads: 2)
INFO [17:48:16]  System environment properties successfully read. 
      (Memory: 3145728 Threads: 2)
      
scanResult: []

INFO [17:48:16]  Initializing dependencies. 
      (Memory: 3145728 Threads: 2)
INFO [17:48:16]  Dependencies successfully created. 
      (Memory: 3145728 Threads: 2)
INFO [17:48:16]  Started Application in 5.042 seconds 
      (Memory: 3145728 Threads: 2)
INFO [17:48:16]  Stopping application 
      (Memory: 4718592 Threads: 4)
INFO [17:48:16]  Application stopped 
      (Memory: 4718592 Threads: 4)

Here as u can see my scanResult shows empty array


When I run my application locally instead of running native image I get scanResult as

scanResult: [class com.zopsmart.rocket.context.AppContext, class com.zopsmart.rocket.context.ServerContext]

GraalVM version
GraalVM JDK 21

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions