如何让Java从另一个包中加载导入的类?

时间:2015-09-26 01:32:32

标签: java classloader packages

我想动态加载类列表。 例如我在目录/ hereAreMyClasses中: class1.class class2.class class3.class

使用ClassLoader迭代这些类并加载它们就可以了。

现在的问题是,其中一个类(比如说,class2)从另一个位置/另一个包中导入了一些类。

import other.package.someClass;

public class class2 {
  //stuff
}

这在编译时工作正常,但是当我运行程序时,当我调用时,我得到someClass的NoClassDefFoundError

Class<?> clazz = clazzLoader.loadClass("class2");

如何让ClassLoader也加载所需的导入类?

修改

问题解决了,感谢我注意到的答案,我在调用我的程序时错过了类路径定义。

1 个答案:

答案 0 :(得分:-1)

在查看此解决方案之前,请尝试自行完成。内森说的是对的。

在编译和执行Java代码时,必须将其他目录添加到classpath。一个简单的例子是这样的:

文件夹1:

directory1/SourceCode1.java

文件夹2:

directory2/com/dir2/SourceCode2.class

假设SourceCode1.java的包名为com.dir1:

package com.dir1;

import com.dir2.SourceCode2;

public class SourceCode1 {
    public static void main(String[] args) {
        //SourceCode2 used in this class
    }
}

然后在编译和执行时你必须使用-cp命令告诉编译器和解释器在指定的位置找到类路径。

编译时:

javac -d . -cp .:<directory2 path> SourceCode1.java

执行时:

java -cp .:<directory2 path> com.dir1.SourceCode1