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

标签 java eclipse plugins classpath

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

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

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

其他实验涉及使用 javaProject.getAllPackageFragmentRoots(),但这似乎不包括“Maven 依赖项”容器内的项目依赖项。

最佳答案

makeAbsolute() 调用无法识别上下文。它只是添加了一个前导“/”。

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

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

关于java - 如何在 Eclipse 插件中获取 IJavaProject 的类路径(作为文件路径)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5162369/

相关文章:

javascript - 如何在 TinyMCE 4 弹出窗口中创建此特定布局?

javascript - 如何检测浏览器插件?

eclipse - java中导入无法解决错误

android - 如何让 Android 应用程序像这样漂亮?

java、驱动 APIv2、appengine 1.7.3、struts2.3.4.1、OAuth2。 token 响应异常 : 400 OK invalid_grant

java - solr中的串联字符串搜索

java - println 方法中的 true/false boolean 值

java - 在 Java 中与时间交互

JavaFx 可运行 JAR 导出不起作用

java - 如何使用 getString() 获取偏好的 "title"而不是 "value"