wuxw
2019-08-13 9e29441646434d9f54a2c3e855a724633885d8a4
WebService/src/main/java/com/java110/web/core/PackageScanner.java
@@ -1,8 +1,11 @@
package com.java110.web.core;
import org.springframework.util.StringUtils;
import java.io.*;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.net.JarURLConnection;
import java.net.URISyntaxException;
import java.net.URL;
@@ -16,11 +19,11 @@
public abstract class PackageScanner {
    public void packageScanner(Class<?> klass,String suffix) {
    public void packageScanner(Class<?> klass, String suffix) {
        packageScanner(klass.getPackage().getName(), suffix);
    }
    public void packageScanner(String packageName,String suffix) {
    public void packageScanner(String packageName, String suffix) {
        String packagePath = packageName.replace(".", File.separator);
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
@@ -29,13 +32,13 @@
            while (resources.hasMoreElements()) {
                URL url = resources.nextElement();
                if (url.getProtocol().equals("jar")) {
                    scanPackage(url,suffix);
                    scanPackage(packageName, url, suffix);
                } else {
                    File file = new File(url.toURI());
                    if (!file.exists()) {
                        continue;
                    }
                    scanPackage(packageName, file,suffix);
                    scanPackage(packageName, file, suffix);
                }
            }
        } catch (IOException e) {
@@ -45,23 +48,26 @@
        }
    }
    private void scanPackage(URL url,String suffix) throws IOException {
        JarURLConnection jarUrlConnection =  (JarURLConnection) url.openConnection();
    private void scanPackage(String packageName, URL url, String suffix) throws IOException {
        JarURLConnection jarUrlConnection = (JarURLConnection) url.openConnection();
        JarFile jarFile = jarUrlConnection.getJarFile();
        Enumeration<JarEntry> jarEntries = jarFile.entries();
        while (jarEntries.hasMoreElements()) {
            JarEntry jarEntry = jarEntries.nextElement();
            String jarName = jarEntry.getName();
            if (jarEntry.isDirectory() || !jarName.endsWith(suffix)) {
            if (jarEntry.isDirectory() || !jarName.endsWith(suffix) || !jarName.startsWith(packageName)) {
                continue;
            }
            String className = jarName.replace(suffix, "");
            handleResource(className);
            //String className = jarName.replace(suffix, "");
            handleResource(jarName);
        }
    }
    private void scanPackage(String packageName, final File currentfile,final String suffix) {
    private void scanPackage(String packageName, final File currentfile, final String suffix) {
        File[] files = currentfile.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
@@ -73,11 +79,11 @@
        });
        for (File file : files) {
            if (file.isDirectory()) {
                scanPackage(packageName + "." + file.getName(), file,suffix);
                scanPackage(packageName + "." + file.getName(), file, suffix);
            } else {
                packageName = packageName.replace(".",File.separator);
                String fileName = packageName + File.separator +  file.getName();
                if(StringUtils.isEmpty(fileName) || !fileName.endsWith(suffix)){
                packageName = packageName.replace(".", File.separator);
                String fileName = packageName + File.separator + file.getName();
                if (StringUtils.isEmpty(fileName) || !fileName.endsWith(suffix)) {
                    continue;
                }
                handleResource(fileName);
@@ -94,7 +100,7 @@
            protected void handleResource(String filePath) {
            }
        }.packageScanner("components","js");
        }.packageScanner("components", "js");
    }
}