0

这是我的情况:我在项目 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。难道我做错了什么?

4

1 回答 1

0

你需要实现一个自定义类加载器,像这样

    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");
于 2013-06-11T02:53:54.190 回答