我正在编写一个插件,它将为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
的结果并遍历它们并处理各个条目的方法更简单?其次,如果没有更简单的方法,我应该如何查找通过构建项目而生成的类文件?
答案 0 :(得分:2)
如果outputLocation
是null
,则必须使用默认输出位置 javaProject.getOutputLocation()
,而不是entry.getPath()
。
请参见Javadoc of IClasspathEntry.getOutputLocation()
:
返回:
完整路径[...],如果使用默认输出文件夹,则为
null
如果在项目>属性:“ Java构建路径” 选项卡“源” 中,未选中允许源文件夹的输出文件夹复选框,{{ 1}}将始终返回IClasspathEntry::getOutputLocation()
。