首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试加载派生类时出现java.lang.ClassNotFoundException

尝试加载派生类时出现java.lang.ClassNotFoundException
EN

Stack Overflow用户
提问于 2020-12-16 18:12:01
回答 1查看 76关注 0票数 2

我有两个不同的模块:MultiRealmSurvivalRealm。MultiRealm提供了一个抽象类(LoadedRealm),类SurvivalRealm (在模块SurvivalRealm中)对其进行了扩展。现在,MultiRealm尝试从jar加载SurvivalRealm类。但是在尝试加载时,我得到了以下错误:java.lang.NoClassDefFoundError: net/lightbluefoxlabs/dev/multirealm/core/multirealmcore/Realms/LoadedRealm,其中net/lightbluefoxlabs/dev/multirealm/core/multirealmcore/Realms/LoadedRealm是LoadedRealm类的正确位置。下面是Stacktrace:

代码语言:javascript
复制
[23:03:52] [Thread-10/WARN]:    at java.lang.ClassLoader.defineClass1(Native Method)
[23:03:52] [Thread-10/WARN]:    at java.lang.ClassLoader.defineClass(Unknown Source)
[23:03:52] [Thread-10/WARN]:    at java.security.SecureClassLoader.defineClass(Unknown Source)
[23:03:52] [Thread-10/WARN]:    at java.net.URLClassLoader.defineClass(Unknown Source)
[23:03:52] [Thread-10/WARN]:    at java.net.URLClassLoader.access$100(Unknown Source)
[23:03:52] [Thread-10/WARN]:    at java.net.URLClassLoader$1.run(Unknown Source)
[23:03:52] [Thread-10/WARN]:    at java.net.URLClassLoader$1.run(Unknown Source)
[23:03:52] [Thread-10/WARN]:    at java.security.AccessController.doPrivileged(Native Method)
[23:03:52] [Thread-10/WARN]:    at java.net.URLClassLoader.findClass(Unknown Source)
[23:03:52] [Thread-10/WARN]:    at java.lang.ClassLoader.loadClass(Unknown Source)
[23:03:52] [Thread-10/WARN]:    at java.lang.ClassLoader.loadClass(Unknown Source)
[23:03:52] [Thread-10/WARN]:    at net.lightbluefoxlabs.dev.multirealm.core.multirealmcore.Realms.LoadedRealm.RealmFactory(LoadedRealm.java:54)
[23:03:52] [Thread-10/WARN]:    at net.lightbluefoxlabs.dev.multirealm.core.multirealmcore.Realms.LoadedRealm.RealmFactory(LoadedRealm.java:20)
[23:03:52] [Thread-10/WARN]:    at net.lightbluefoxlabs.dev.multirealm.core.multirealmcore.Realms.RealmManager.Initialize(RealmManager.java:22)
[23:03:52] [Thread-10/WARN]:    at net.lightbluefoxlabs.dev.multirealm.core.multirealmcore.Realms.RealmManager.lambda$InitializeAsync$0(RealmManager.java:39)
[23:03:52] [Thread-10/WARN]:    at java.lang.Thread.run(Unknown Source)
[23:03:52] [Thread-10/WARN]: Caused by: java.lang.ClassNotFoundException: net.lightbluefoxlabs.dev.multirealm.core.multirealmcore.Realms.LoadedRealm
[23:03:52] [Thread-10/WARN]:    at java.net.URLClassLoader.findClass(Unknown Source)
[23:03:52] [Thread-10/WARN]:    at java.lang.ClassLoader.loadClass(Unknown Source)
[23:03:52] [Thread-10/WARN]:    at java.lang.ClassLoader.loadClass(Unknown Source)
[23:03:52] [Thread-10/WARN]:    ... 16 more

下面是SurvivalRealm类:

代码语言:javascript
复制
import net.lightbluefoxlabs.dev.multirealm.core.multirealmcore.Realms.LoadedRealm;
import net.lightbluefoxlabs.dev.multirealm.core.multirealmcore.Realms.Worlds.RealmWorld;

public class SurvivalRealm extends LoadedRealm {

    public SurvivalRealm(String RealmPath) {
        super(RealmPath);
        Load();
    }

    @Override
    public void Load() {
        //LoadStuff
    }

    @Override
    public void Unload() {

    }
}

..。LoadedRealm中的这个静态函数尝试导入这个类:

代码语言:javascript
复制
public static LoadedRealm RealmFactory(String jarPath, String RealmPath)  throws RealmLoadException{
        try {
            File file = new File(jarPath);
            URLClassLoader c = new URLClassLoader(new URL[]{file.getAbsoluteFile().toURI().toURL()});
            Class<?> realmClass = c.loadClass(RealmClass);
            return (LoadedRealm)(realmClass.getDeclaredConstructor(String.class).newInstance(RealmPath));
        }catch (Exception e){
            throw new RealmLoadException(e);
        }
    }

以下是该结构的图片:

MultiRealm模块不会导入/“知道”(请原谅我的术语) SurvivalRealm模块,反之亦然。

我只是想实现一些不可能的事情吗?如果您需要.iml文件,只需问一声。任何帮助都将是非常感谢的,我已经尝试了一整天来解决这个问题。感谢您通读这期初学者的文章。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-16 18:44:45

您应该尝试使用来自maven的pom文件来实现您的目标。多模块项目由引用一个或多个子模块的父POM定义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65321204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档