加载外部类

时间:2019-07-18 15:57:59

标签: java reflection urlclassloader

我正在尝试在项目中加载外部类。 我的想法是加载一个类,然后使用反射来获取其属性和方法。

我正在尝试这样做,但是没有用

        Path destination = Paths.get("C:\\Project\\src\\com\\test\\TestLauncher.java");

        URL[] classUrls = new URL[]{ new File(destination.subpath(0, destination.getNameCount()).toString()).toURL() };

        URLClassLoader ucl = new URLClassLoader(classUrls);

        Class<?> beanClass = ucl.loadClass("com.test.TestLauncher");

当您尝试在同一项目中的文件中使用此代码时,它会很吸引人,但是当类不在同一项目中时,此代码将不起作用,在这种情况下,我会遇到以下错误:

  

java.lang.ClassNotFoundException:com.test.FileToLoad位于   java.net.URLClassLoader.findClass(未知源),网址为   java.lang.ClassLoader.loadClass(未知源)   java.lang.ClassLoader.loadClass(未知源)   urlLoader.Play.main(Play.java:26)

1 个答案:

答案 0 :(得分:2)

首先,您需要编译.java文件并尝试加载.class文件。

您还获得了TestLauncher.java文件,但尝试加载com.test.FileToLoad

尝试一下:

// path to base directory with classes (exclude packages)
File file = new File("C:\\Project\\target\\classes");
URL[] classUrls = new URL[]{ file.toURI().toURL() };
URLClassLoader ucl = new URLClassLoader(classUrls);
Class<?> beanClass = ucl.loadClass("com.test.TestLauncher");