【发布时间】:2019-07-18 15:57:59
【问题描述】:
我正在尝试在我的项目中加载外部类。 我的想法是加载一个类,然后使用反射来获取它的属性和方法。
我正在尝试这样做,但它不起作用
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 at java.net.URLClassLoader.findClass(未知来源)在 java.lang.ClassLoader.loadClass(Unknown Source) 在 java.lang.ClassLoader.loadClass(Unknown Source) 在 urlLoader.Play.main(Play.java:26)
【问题讨论】:
-
您必须从已编译的
.class文件中加载您的类。 -
在我的代码中,我使用参数编译它,如下所示: String command = "javac -parameters " + destination.toAbsolutePath().toString();进程 proc = Runtime.getRuntime().exec(command);
-
这里如何编译Java源文件无关紧要。
destination变量需要更改为 .class 文件的路径。
标签: java reflection urlclassloader