使用Eclipse的JDT,如何确定项目的类路径?

时间:2019-08-20 17:24:19

标签: eclipse eclipse-plugin eclipse-jdt

我正在编写一个插件,它将为Eclipse的Project Explorer中选择的Java类生成单元测试。该插件使用名为Randoop的第三方程序来生成测试,因此我使用ProcessBuilder来实现此目的:

ProcessBuilder builder = new ProcessBuilder(command);

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

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

在该插件中,我试图根据Eclipse知道的类路径为Randoop生成类路径。这是我到目前为止的一些内容:

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条目对应的类文件的路径方面做得不好。例如,我看到的是/myPkgFragRoot/src/main/java而不是myPkgFragRoot/target/classes的类路径条目。

对于Eclipse如何处理类路径,我似乎有些糊涂,因此我正在寻求帮助。首先,我想知道我的高级方法是否错误。似乎我正在编写大量代码以生成不正确的类路径。从IJavaProject获取类路径是否比获取getResolvedClasspath的结果并遍历它们并处理各个条目的方法更简单?其次,如果没有更简单的方法,我应该如何查找通过构建项目而生成的类文件?

1 个答案:

答案 0 :(得分:2)

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

请参见Javadoc of IClasspathEntry.getOutputLocation()

  

返回:

     

完整路径[...],如果使用默认输出文件夹,则为 null

如果在项目>属性:“ Java构建路径” 选项卡“源” 中,未选中允许源文件夹的输出文件夹复选框,{{ 1}}将始终返回IClasspathEntry::getOutputLocation()