public static PackageScanner create() {
    for (int i = 0; i < PACKAGE_SCANNERS.size(); i++) {
      Class<? extends PackageScanner> scannerClass = PACKAGE_SCANNERS.get(i);
      PackageScanner scanner = ReflectionUtils.invokeConstructor(scannerClass);
      String packageName = PackageScannerFactory.class.getPackage().getName();
      Sequence<String> test = scanner.getPackageClasses(packageName, ClassesListerOptions.DEFAULT);
      if (!test.isEmpty()) {
        if (i > 0) {
          logger.debug(
              "Using "
                  + scannerClass.getSimpleName()
                  + "(previously did not work: "
                  + classList(PACKAGE_SCANNERS.subList(0, i))
                  + ")");
        }
        return scanner;
      }
    }

    logger.error(
        "No working scanner "
            + PackageScanner.class.getSimpleName()
            + " found, "
            + "returning dummy (did not work: "
            + classList(PACKAGE_SCANNERS)
            + ")");
    return new NullPackageScanner();
  }