Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Eclipse插件中获得IJavaProject的类路径(作为文件路径)?_Java_Eclipse_Plugins_Classpath - Fatal编程技术网

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

如何在Eclipse插件中获得IJavaProject的类路径(作为文件路径)?,java,eclipse,plugins,classpath,Java,Eclipse,Plugins,Classpath,我正在开发一个Eclipse插件,它需要构建一个类加载器,可以访问Eclipse中项目类路径中的所有内容。我有一个IJavaProject,我正在尝试构建一个URL列表,以传递给URLClassLoader: final IClasspathEntry[] resolvedClasspath = javaProject.getResolvedClasspath(true); for (IClasspathEntry classpathEntry : resolvedClasspath) {

我正在开发一个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 Dependencies”容器中)都只显示为“file:/projectName”,而不是绝对路径

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

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

您需要检查路径是否为绝对路径(IPath.isAbsolute())。如果不是绝对的,则调用IProject.getLocation()以获取两个路径的项目根和concat


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

即使对于相对路径,isAbsolute()也会返回true:),但classpathEntry.getPath().toFile().isAbsolute()会返回true:)