Eclipse PDE:给定像/ProjectName/lib/something.jar这样的相对路径,如何获得完整的文件系统路径?

时间:2012-02-04 01:15:48

标签: eclipse eclipse-plugin eclipse-pde

我正在尝试找到原始类路径中的jar文件的路径。 getRawClasspath返回IClasspathEntry对象的集合。我可以在那些上调用getPath。

但getPath返回一些奇怪的东西:一个以项目名称开头的IPath,如:

/ProjectName/lib/something.jar

将此相对路径转换为完全合格的OS路径的正确方法是什么?起初我以为我可以添加工作区根目录的路径,但这不起作用,因为工作区和项目之间经常有中间目录。

更一般地说,我怎么知道如何处理方法返回的IPath?好像我从来不知道IPath是什么;相对于项目,相对于工作区,相对于项目,但项目名称作为第一个元素,相对于月相...这一切都莫名其妙,文档从来没有帮助 - 或者至少我不喜欢不知道在哪里看。

更新

我现在更加困惑。问题仍然是,当你有一个IClasspathEntry时,我仍然不清楚如何将它解析为文件系统路径。

答案是“如果路径以/它是绝对路径(相对于工作空间)开始”是不正确的。问题是IClasspath上的getPath方法返回以下两种情况之一:路径以一个相对于工作空间的斜杠,或一个以/是实际文件系统路径开头的IPath。是的,两个完全不同的东西被推入一个类型。当jar在工作区之外时,你得到文件系统变量,你得到了<绝对“变体,当它在工作区中时。

我认为部分答案是IPath本身只是一个奇特的字符串。你必须知道它来自哪里才能理解它。它没有提供正确的信息以使其自身有用。

那么解决这个问题的正确方法是什么?

3 个答案:

答案 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

的照片