我正在尝试找到原始类路径中的jar文件的路径。 getRawClasspath返回IClasspathEntry对象的集合。我可以在那些上调用getPath。
但getPath返回一些奇怪的东西:一个以项目名称开头的IPath,如:
/ProjectName/lib/something.jar
将此相对路径转换为完全合格的OS路径的正确方法是什么?起初我以为我可以添加工作区根目录的路径,但这不起作用,因为工作区和项目之间经常有中间目录。
更一般地说,我怎么知道如何处理方法返回的IPath?好像我从来不知道IPath是什么;相对于项目,相对于工作区,相对于项目,但项目名称作为第一个元素,相对于月相...这一切都莫名其妙,文档从来没有帮助 - 或者至少我不喜欢不知道在哪里看。
更新
我现在更加困惑。问题仍然是,当你有一个IClasspathEntry时,我仍然不清楚如何将它解析为文件系统路径。
答案是“如果路径以/它是绝对路径(相对于工作空间)开始”是不正确的。问题是IClasspath上的getPath方法返回以下两种情况之一:路径以一个相对于工作空间的斜杠,或一个以/是实际文件系统路径开头的IPath。是的,两个完全不同的东西被推入一个类型。当jar在工作区之外时,你得到文件系统变量,你得到了<绝对“变体,当它在工作区中时。
我认为部分答案是IPath本身只是一个奇特的字符串。你必须知道它来自哪里才能理解它。它没有提供正确的信息以使其自身有用。
那么解决这个问题的正确方法是什么?
答案 0 :(得分:5)
试试这个:
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IResource res = root.findMember("/ProjectName/lib/something.jar");
System.out.println(res.getLocation().toString());
答案 1 :(得分:1)
Eclipse中的路径很复杂,还有一些其他未提及的情况,例如类路径容器(JRE是一个示例),工作空间和类路径变量之外的链接资源。
为了简化,我建议你使用getResolvedClasspath
代替,只返回'simple'classpath entires(没有变量,没有容器)。根据它的Javadoc,它返回绝对路径,它们的解释取决于条目的类型:
CPE_LIBRARY
- 如果它是一个外部库,它是一个文件系统路径(它没有相关的资源,这意味着你找不到findMember
)。否则,它是基于工作空间根目录的路径CPE_PROJECT
- 项目的绝对路径CPE_SOURCE
- 源文件夹的绝对路径所有绝对路径都在工作区中解释。如果您需要文件系统路径,则需要通过getLocation
。
作为旁注,文件系统实体和工作空间资源之间没有一对一的映射。由于工作空间链接,您可能有多个工作空间路径指向相同(文件系统)位置。
答案 2 :(得分:-2)
我有一个建议,看图片附件,从任何eclipse插件的属性中找到“location”属性,也许可以找到它来自哪里。但对不起,我没有10点声望,你可以看到picture url
的照片