使用 Eclipse 的 JDT,如何识别项目的类路径?

Using Eclipse's JDT, how do I identify the classpath for a project?

我正在编写一个插件,它将为在 Eclipse 的项目资源管理器中选择的 Java class 生成单元测试。该插件使用名为 Randoop 的第三方程序来生成测试,因此我使用 ProcessBuilder:

实现了这一点
ProcessBuilder builder = new ProcessBuilder(command);

传递给 ProcessBuilder 的命令是一个字符串列表,类似于

["java", "-classpath", "path1;path2;etc", "randoop.main.Main", ...]

在插件中,我试图根据 Eclipse 知道的 class 路径为 Randoop 生成 class 路径。以下是我目前的一些资料:

IClasspathEntry[] resolvedClasspath = javaProject.getResolvedClasspath(true);

for (IClasspathEntry entry : resolvedClasspath) {
    if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
        IPath outputLocation = entry.getOutputLocation();

        if (outputLocation != null) {
            buf.append(outputLocation.toString());
        }
        else {
            buf.append(entry.getPath().toString());
        }
    }
    else {
        buf.append(entry.getPath().toString());
    }
    buf.append(CLASSPATH_SEP);
}

不太对。它似乎可以指定库 jar 文件,但在识别对应于 CPE_SOURCE 条目的 class 文件的路径方面做得不好。例如,我看到 /myPkgFragRoot/src/main/java 的 class 路径条目而不是 myPkgFragRoot/target/classes

我似乎对 Eclipse 如何处理 class 路径一无所知,所以我正在寻求帮助。首先,我想知道我的高级方法是否错误。好像我正在编写大量代码来生成不正确的 class 路径。从 IJavaProject 获取 classpath 是否有比获取 getResolvedClasspath 的结果并遍历它们并操作各个条目更简单的方法?其次,如果没有更简单的方法,我应该如何定位构建项目产生的 class 文件?

如果 outputLocationnull,您必须使用默认输出位置 javaProject.getOutputLocation() 而不是 entry.getPath()

Javadoc of IClasspathEntry.getOutputLocation():

Returns:

the full path [...], or null if using default output folder

如果在项目 > 属性中:Java构建路径选项卡复选框允许输出源文件夹 的文件夹未选中,IClasspathEntry::getOutputLocation() 将始终 return null.