本节描述如何设置 Java 构建路径(即,用于构建 Java 项目的类路径)。类路径是用于说明源代码或二进制格式的可用类型的类路径条目的数组,可使用它来查找可用类型。这些条目的排序定义了可用类型的优先权。
因为所有包片段根是直接从 Java 构建路径派生的(每个条目映射至一个或多个包片段根,参见 getPackageFragmentRoots),所以 Java 构建路径还会控制 Java 项目元素的结构。
本节未涉及 Java 运行时路径(它可以单独定义),参见讲述如何运行 Java 程序的相关章节。
可以通过对相应项目的 Java 元素使用 setRawClasspath 来使用程序更改项目的构建路径,例如:
IProject project = ... // get some project resource
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
注意,还存在 setRawClasspath 的变体,它允许同时定义 Java 构建路径和项目输出位置。
Java 构建路径保存在项目位置下面的名为“.classpath”的文件中。此文件可用来提供一种方法来通过某些源代码资源库与其它项目共享 Java 构建路径设置。需要特别指出的是,由于此文件可能会毁坏,所以不应该手工编辑它。
可以使用在 JavaCore 上定义的 factory 方法来定义类路径条目,以便引用下列任何内容:
例如,指示项目“MyProject”的源文件夹“src”的条目:
IClassPathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src");
例如,指示“MyProject”的类文件文件夹“lib”的条目:
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("/MyProject/lib"),
null, //no source
null, //no source
false); //not exported
例如,指示具有源附件的外部 JAR 的条目:
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("d:/lib/foo.jar"), // library location
new Path("d:/lib/foo_src.zip"), //source archive location
new Path("src"), //source archive root path
true); //exported
例如,指示已隐式导出到进一步的相关项目的先决条件项目“MyFramework”的条目:
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); //exported
例如,指示使用变量“HOME”间接引用的库的条目,并且还使用变量“SRC_HOME”和“SRC_ROOT”定义了源附件:
IClassPathEntry varEntry = JavaCore.newVariableEntry(
new Path("HOME/foo.jar"), // library location
new Path("SRC_HOME/foo_src.zip"), //source archive location
new Path("SRC_ROOT"), //source archive root path
true); //exported
JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null); // no progress
例如,指示系统类库容器的条目:
IClassPathEntry varEntry = JavaCore.newContainerEntry(
new Path("JDKLIB/default"), // container 'JDKLIB' + hint 'default'
false); //not exported
JavaCore.setClasspathContainer(
new Path("JDKLIB/default"),
new IJavaProject[]{ myProject }, // value for 'myProject'
new IClasspathContainer[] {
new IClasspathContainer() {
public IClasspathEntry[] getClasspathEntries() {
return new IClasspathEntry[]{
JavaCore.newLibraryEntry(new Path("d:/rt.jar"), null, null, false);
};
}
public String getDescription() { return "Basic JDK library container"; }
public int getKind() { return IClasspathContainer.K_SYSTEM; }
public IPath getPath() { return new Path("JDKLIB/basic"); }
}
},
null);
还可以使用 getResolvedClasspath 来查询项目的已解析路径。如果需要,此操作将触发涉及到的变量和/或容器的初始化。注意,许多“Java 模型”操作会隐式地导致解析 Java 构建路径(例如,计算项目包片段根需要解析构建路径)。