我的情况是:我在项目a中有一个类,我想在项目B 的方法中加载这个类,而不需要将项目a(或包含该类的JAR)添加到项目B的类路径中(我个人不反对这样做,但我必须按照规范构建它)。
注意,我将不知道这个类的绝对路径(让我们称之为"MyClass"),因为项目A可能安装在不同的位置。但是,我知道如何根据我的当前目录导航到它,所以这就是我所做的。
这是我尝试过的:
// Navigate to the directory that contains the class
File pwd = new File(System.getProperty("user.dir"));
File src = pwd.getAbsoluteFile().getParentFile();
File dir = new File(src.getAbsolutePath() + File.separator + "folder" + File.separator + "src");
// dir is the directory that contains all the packages of project A
// Load the class
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] {dir.toURI().toURL()});
try {
classLoader.loadClass("com.blahblahblah.MyClass");
} catch (ClassNotFoundException exception) {
}
抛出ClassNotFoundException异常。我做错了什么吗?
您需要实现一个自定义类加载器,如下所示
Class<?> cls = new ClassLoader() {
public java.lang.Class<?> loadClass(String name) throws ClassNotFoundException {
byte[] a = read class bytes from known location
return defineClass(name, b, 0, a.length);
};
}.loadClass("test.MyClass");