Java反射:如何在不将该项目或JAR添加到类路径的情况下从另一个项目加载类?

时间:2013-06-11 02:33:46

标签: java reflection classloader classnotfoundexception urlclassloader

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

1 个答案:

答案 0 :(得分: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");