使用 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 文件?
如果 outputLocation
是 null
,您必须使用默认输出位置 javaProject.getOutputLocation()
而不是 entry.getPath()
。
见Javadoc of IClasspathEntry.getOutputLocation()
:
Returns:
the full path [...], or null
if using default output folder
如果在项目 > 属性中:Java构建路径选项卡源复选框允许输出源文件夹 的文件夹未选中,IClasspathEntry::getOutputLocation()
将始终 return null
.
我正在编写一个插件,它将为在 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 文件?
如果 outputLocation
是 null
,您必须使用默认输出位置 javaProject.getOutputLocation()
而不是 entry.getPath()
。
见Javadoc of IClasspathEntry.getOutputLocation()
:
Returns:
the full path [...], or
null
if using default output folder
如果在项目 > 属性中:Java构建路径选项卡源复选框允许输出源文件夹 的文件夹未选中,IClasspathEntry::getOutputLocation()
将始终 return null
.