NutzCN Logo
精华 1.r.60-SNAPSHOT Scans.me().scanPackage(BaseJob.class) 扫描不到类
发布于 2922天前 作者 幸福的旁边 3358 次浏览 复制 上一个帖子 下一个帖子
标签:

RT...
Scans.me().scanPackage(BaseJob.class)扫描不到类
问题出在 org.nutz.lang.Lang.loadClass 方法上
异常:

java.lang.NoClassDefFoundError: app.job.BaseJob
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:264)
	at org.nutz.lang.Lang.loadClass(Lang.java:2018)
	at org.nutz.resource.Scans.rs2class(Scans.java:402)
	at org.nutz.resource.Scans.scanPackage(Scans.java:308)
	at org.nutz.resource.Scans.scanPackage(Scans.java:279)
	at app.module.MobileViewAction.home(MobileViewAction.java:65)

用以前的版本

public static Class<?> loadClass(String className) throws ClassNotFoundException {
        try {
            return Thread.currentThread().getContextClassLoader().loadClass(className);
        }
        catch (ClassNotFoundException e) {
            return Class.forName(className);
        }
    }

可以扫描到结果

8 回复

嗯,我改改

https://github.com/nutzam/nutz/commit/a962b0d4d73b6a46993787d63c3a132746a4dd4c

另外, 是什么场景下出现的呢?? 把nutz放在tomcat的lib目录中了???

不是,是在开发环境中出现的问题
Eclipse maven web项目

多个maven模块??

好神奇, 完全不知道怎么重现这个问题

我貌似找着问题了
我的BaseJob里有这么一句话

protected static Dao dao = AppUtil.getIocBean(Dao.class);

而AppUtil.getIocBean方法只有在Setup.init后才能正常使用,否则抛npe
所以启动时扫描最终调用 Class.forName加载类会无法加载
用Class.forName(String name, boolean initialize, ClassLoader loader) initialize:false 应该就可以了

添加回复
请先登陆
回到顶部