我已经创建了一个插件来获取特定.java文件的字段,因为我正在使用以下代码:
Class<?> forName = Class.forName(refPath);//refPath = "xyz.test"
Field[] declaredFields = forName.getDeclaredFields();
for (Field field : declaredFields) {
String name = field.getName();
}
当我将此插件部署到工作区时,它完全适用于其插件项目,但不能为同一工作区的其他项目获取字段。抛出异常ClassNotFound,显然classloader无法找到其他项目文件。
有没有办法可以获得部署插件的同一工作区的其他项目(插件/非插件)的文件信息?
答案 0 :(得分:0)
如评论中所述,您需要java类容器(JAR?)在您的类路径中。
是否可以静态执行此操作,并在启动JVM时将其他存档添加到类路径中,或者您可以尝试动态添加它。
要做到这一点,您可以做以下事情:
/**
* Adds a jar file dynamically to the current class path
* @param jarFile
*/
private static void addToClassPath(File jarFile) {
try {
System.out.println("adding " + jarFile.getAbsolutePath() + " to classpath");
URL u = jarFile.toURI().toURL();
URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
/* Here is a trick to call URLClassLoader.addURL whereas this method is 'protected' */
Class sysclass = URLClassLoader.class;
Method method = sysclass.getDeclaredMethod("addURL", sysClassLoaderParams);
method.setAccessible(true);
method.invoke(sysloader, new Object[] { u });
} catch (Exception e) {
System.out.println("Error while updating classpath: "+ e.toString());
}
}