繁体   English   中英

如何在Eclipse插件中获取IJavaProject的类路径作为文件路径?

[英]How do I get the classpath, as file paths, of an IJavaProject in an Eclipse plugin?

我正在开发一个Eclipse插件,该插件需要构建一个可以访问Eclipse中项目的类路径中所有内容的类加载器。 我有一个IJavaProject,并且正在尝试构建要传递给URLClassLoader的URL列表:

final IClasspathEntry[] resolvedClasspath = javaProject.getResolvedClasspath(true);
for (IClasspathEntry classpathEntry : resolvedClasspath) {
    urls.add(classpathEntry.getPath().makeAbsolute().toFile().getCanonicalFile().toURL());
}

但是任何项目依赖项(无论是手动添加的,还是来自Maven插件的“ Maven Dependencies”容器中)都将显示为仅“ file:/ projectName”,而不是绝对路径。

其他实验涉及使用javaProject.getAllPackageFragmentRoots(),但这似乎并未在“ Maven Dependencies”容器内包含项目依赖项。

makeAbsolute()调用不支持上下文。 它只是添加一个前导“ /”。

您需要检查路径是否为绝对路径(IPath.isAbsolute())。 如果不是绝对的,请调用IProject.getLocation()以获取项目根目录并连接这两个路径。

提示:UrlClassLoader将在该类加载器存在期间锁定所有jar。 这会给插件用户带来问题,因为在插件处于活动状态时,他们将无法删除或更改jar。 我已经看到了几种解决方法。 最有效的方法是先将jars复制到一个临时位置,然后使用副本构造class loader。 然后,您可以监视原始的jar并更新副本和类加载器,而不必担心锁定用户控制的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM