请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

获取到“包名”以后,resources无法进入while循环

老师,这里获取到“包名”以后,进入扫描类的方法,其中得到的CompoundEnumeration对象resources无法进入while(resources.hasMoreElements())

		TomcatServer tomcatServer=new TomcatServer(args);
        try {
            tomcatServer.startServer();
            String packageName=clazz.getPackage().getName();
            System.out.println(packageName);
            // 包名正确 但classList.size()==0
            List<Class<?>> classList=ClassScanner.scanClass(packageName);
            classList.forEach(it->System.out.println(it.getName()));
        } catch (Exception e) {
            e.printStackTrace();
        }
	public static List<Class<?>> scanClass(String packageName) throws IOException, ClassNotFoundException
    {
        List<Class<?>> classList=new ArrayList<>();
        String path=packageName.replace(".", "/");
        ClassLoader defaultClassLoader=Thread.currentThread().getContextClassLoader();
        Enumeration<URL> resources=defaultClassLoader.getResources(packageName);
        while(resources.hasMoreElements()){ // 循环无法进入
            URL resource=resources.nextElement();
            if (resource.getProtocol().contains("jar")){
                // 如果资源类型为 jar
                JarURLConnection jarURLConnection= (JarURLConnection) resource.openConnection();
                String jarFilePath=jarURLConnection.getJarFile().getName();
                classList.addAll(getClassesFromJar(jarFilePath, path));
            }else{
                // 其他资源类型暂无操作
            }
        }

        return classList;
    }

正在回答 回答被采纳积分+3

插入代码

3回答

提问者 慕无忌505374 2019-06-12 16:29:40

检查出来了,是因为把包名传入了defaultClassLoader.getResources(packageName),应该传入path

2 回复 有任何疑惑可以回复我~
顾小兔 2019-06-13 11:13:44

E:\gitworkspace\CustomFramework\test-mini-spring>java -jar build\libs\test-mini-spring-1.0-SNAPSHOT.jar

Exception in thread "main" java.lang.NoClassDefFoundError: com/guxiaotu/starter/MiniApplication

        at com.guxiaotu.Application.main(Application.java:11)

Caused by: java.lang.ClassNotFoundException: com.guxiaotu.starter.MiniApplication

        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

        ... 1 more

总是提示无法找到MiniApplication

0 回复 有任何疑惑可以回复我~
  • 找到问题了,是gradle打包问题
    回复 有任何疑惑可以回复我~ 2019-06-13 11:43:37
提问者 慕无忌505374 2019-06-12 16:37:39

另外如果使用IDEA的main方法启动,也是会出现classLoader无法获取到jar包的情况

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号