Der*_*wis 2 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());
}
Run Code Online (Sandbox Code Playgroud)
但是任何项目依赖项(手动添加,或者来自Maven插件的"Maven Dependencies"容器)都显示为刚刚"file:/ projectName",而不是绝对路径.
其他实验涉及使用javaProject.getAllPackageFragmentRoots(),但这似乎不包括"Maven依赖关系"容器内的项目依赖项.
makeAbsolute()调用不是上下文感知的.它只是添加一个前导"/".
您需要检查路径是否是绝对路径(IPath.isAbsolute()).如果不是绝对的,请调用IProject.getLocation()以获取项目根目录并连接两个路径.
提示:UrlClassLoader将在该类加载器存在期间锁定所有jar.这可能会导致插件用户出现问题,因为当插件处于活动状态时,他们将无法删除或更改jar.我已经看到了几个解决方法.最有效的方法是首先将jar复制到临时位置并使用副本构造类加载器.然后,您可以监视原始jar并更新副本和类加载器,而无需锁定用户控制的文件.
归档时间: |
|
查看次数: |
1920 次 |
最近记录: |