我有一个IJavaProject
,我的目标是生成一个List<File>
以及项目已解析类路径条目的绝对文件系统路径。我首先调用project.getResolvedClasspath(true)
来获得一组IClasspathEntry
对象。但我不知道如何可靠地确定每个条目的绝对文件系统路径。我目前追求的方法在下面突出显示,但如果有更简单的方法,我一定会想知道。IClasspathEntry的绝对文件系统路径
我首先想到的是为每个条目做这样的事情:ResourcesPlugin.getWorkspace().getRoot().getLocation().append(entry.getPath())
。但问题是并不是所有的对象都有工作空间相对路径;外部库有绝对的文件系统路径。我可以很容易地确定IClasspathEntry
是否是一个库(getEntryKind() == IClasspathEntry.CPE_LIBRARY
)...但是我看不到任何明显的API来识别库条目是否是外部的。
的Javadoc IClasspathEntry.getPath()
有这样一段话:
返回此类路径条目的路径。类路径条目的路径的意义取决于它的条目类型:
[...]
•在当前项目(CPE_LIBRARY)的二进制库 - 与此项目相关的路径是绝对路径到JAR(或根文件夹),并且如果它引用了外部库,那么在工作台中就没有关联的资源。
这似乎表明,也许我可以测试“在工作台中没有关联的资源”来确定库是否是外部的。但这是一种可靠的方法吗?那如何转化为代码?
我对可靠性问题是这样的:进入路径/user/kevin/foo.jar
可以参照一个外部的jar(在Linux下我的家目录jar文件),或内部罐子(jar文件在项目“用户”的“凯文”文件夹)。作为用户,我可能会尝试将两个jar文件添加到我的项目类路径中。除非Eclipse阻止我这样做(不幸的是我没有一台Linux机器可以方便地自己测试这个),那么在我看来,内部jar会影响外部jar,而我的结果会不准确。