docs: private void doScanPackageClassesByFile(Set<Class<?>> classes,
                                              String packageName, String packagePath, boolean recursive) {
          File dir = new File(packagePath);
          if (!dir.exists() || !dir.isDirectory()) {
              return;
          }
          final boolean fileRecursive = recursive;
          File[] dirfiles = dir.listFiles(new FileFilter() {
              // 自定义文件过滤规则
              public boolean accept(File file) {
                  if (file.isDirectory()) {
                      return fileRecursive;
                  }
                  String filename = file.getName();
                  return !(excludeInner && filename.indexOf('$') != -1) && filterClassName(filename);
              }
          });
          for (File file : dirfiles) {
              if (file.isDirectory()) {
                  doScanPackageClassesByFile(classes, packageName + "."
                          + file.getName(), file.getAbsolutePath(), recursive);
              } else {
                  String className = file.getName().substring(0,
                          file.getName().length() - 6);
                  try {
                      classes.add(Thread.currentThread().getContextClassLoader()
                              .loadClass(packageName + '.' + className));
  
                  } catch (ClassNotFoundException e) {
                      throw new LtsRuntimeException(e);
                  }
              }
          }
      }