Scan the classpath in Java 9 or later: how to find all classes for module name

In order to find all classes that extend a base class by using the ClassHunter, we must add to our pom.xml the following dependency:

<dependency>
    <groupId>org.burningwave</groupId>
    <artifactId>core</artifactId>
    <version>12.64.3</version>
</dependency>

… And to use Burningwave Core as a Java module, add the following to your module-info.java:

requires org.burningwave.core;

Let’s take a look at the code:

import java.util.Collection;

import org.burningwave.core.assembler.ComponentContainer;
import org.burningwave.core.assembler.ComponentSupplier;
import org.burningwave.core.classes.ClassCriteria;
import org.burningwave.core.classes.ClassHunter;
import org.burningwave.core.classes.ClassHunter.SearchResult;
import org.burningwave.core.classes.SearchConfig;
import org.burningwave.core.io.PathHelper;

public class Finder {

    public Collection<Class<?>> find() {
        ComponentSupplier componentSupplier = ComponentContainer.getInstance();
        PathHelper pathHelper = componentSupplier.getPathHelper();
        ClassHunter classHunter = componentSupplier.getClassHunter();

        try (ClassHunter.SearchResult searchResult = classHunter.findBy(
                SearchConfig.forPaths(
                	pathHelper.getAllMainClassPaths()
                ).by(
                    ClassCriteria.create().allThoseThatMatch((currentScannedClass) ->
                        currentScannedClass.getModule().getName() != null && 
                        currentScannedClass.getModule().getName().equals("jdk.xml.dom")
                    )
                )
            )
        ) {
            return searchResult.getClasses();
        }
    }
}

Flexible

It’s possible to search classes by every criteria that your imagination can make by using lambda expressions

Optimized

Scan engine is highly optimized using direct allocated ByteBuffers to avoid heap saturation

Open

Burningwave core is an advanced free and open source Java library