/class-scanner-stream

Class scanner as a stream

Primary LanguageJavaApache License 2.0Apache-2.0

class-scanner-stream build:

It´s a lightweight class scanner that allows us to apply filters and collect results in a stream pipeline.

Scan all classes under specified package

  List<Class> scanResults = ClassScanner.scan(classLoader, "com.beerboy.scanner")
                .collect(Collectors.toList());

Scan all classes under specified package and group them by package

  Map<Package, List<Class>> scanResultByPackages = ClassScanner.scan(classLoader, "com.beerboy.scanner")
                .collect(Collectors.groupingBy(Class::getPackage));

Specify scan configurations (By default all flags are true)

 ScannerConfig config = ScannerConfig.newBuilder()
                .withRecursive(true)
                .withScanDirs(true)
                .withScanJars(true)
                .build();

 List<Class> result = ClassScanner.scan(classLoader, "com.beerboy.scanner", config)
                .collect(Collectors.toList());

Scan all classes annotated with specified @Annotation under specified package

  List<Class> annotatedClasses = ClassScanner.scan(classLoader, "com.beerboy.scanner")
                .stream()
                .annotatedWith(Logger.class)
                .collect(Collectors.toList());

Scan all classes that extends from specified Class under specified package

  List<Class> childClasses = ClassScanner.scan(classLoader, "com.beerboy.scanner")
                .stream()
                .subClasses(ParentType.class)
                .collect(Collectors.toList());

Scan all classes that implements specified Interface under specified package

  List<Class> implementerClasses = ClassScanner.scan(classLoader, "com.beerboy.scanner")
                .stream()
                .implementers(Interface.class)
                .collect(Collectors.toList());

Scan all classes that meet specified filter under specified package

 List<Class> filteredClasses = ClassScanner.scan(classLoader, "com.beerboy.scanner")
                .stream()
                .filter(clazz -> {
                    return true; // Filter code goes here
                })
                .collect(Collectors.toList());

Scan all classes that meet all applied filters under specified package

  List<Class> filteredClasses = ClassScanner.scan(classLoader, "com.beerboy.scanner")
                .stream()
                .implementers(Interface.class)
                .subClasses(ParentType.class)
                .annotatedWith(Logger.class)
                .collect(Collectors.toList());

Add to your project

Gradle

Add this entry to your build.gradle file

 repositories {
    maven {
        url "https://packagecloud.io/manusant/beerRepo/maven2"
    }
}

And add the dependency

  compile 'com.beerboy.scanner:class-scanner-stream:1.0.0.3'

Maven

Add this to dependencyManagement section of your pom.xml

<repositories>
  <repository>
    <id>manusant-beerRepo</id>
    <url>https://packagecloud.io/manusant/beerRepo/maven2</url>
  </repository>
</repositories>

And add the dependency

  <dependency>
    <groupId>com.beerboy.scanner</groupId>
    <artifactId>class-scanner-stream</artifactId>
    <version>1.0.0.3</version>
  </dependency>