我想动态加载类列表。 例如我在目录/ 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也加载所需的导入类?
修改
问题解决了,感谢我注意到的答案,我在调用我的程序时错过了类路径定义。
答案 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