本节描述如何设置 Java 构建路径。构建路径是用于构建 Java 项目(IJavaProject)的类路径。
类路径只是一组用于描述可用类型的类路径条目(IClassPathEntry)。类型能够以源或二进制格式出现,并且条目在路径中的次序定义了用于在构建期间解析类型的查找次序。
Java 构建路径反映在 Java 项目元素的结构中。可以查询项目的包段根目录(IPackageFragmentRoot)。每个类路径条目都映射至一个或多个包段根目录,每个包段根目录进一步包含一组包段。
此处对构建路径的讨论不涉及 Java 运行时路径,Java 运行时路径可以独立于构建路径进行定义。(有关对运行时类路径的讨论,参见运行 Java 代码。)
可以通过对相应项目的 Java 元素使用
setRawClasspath
来使用程序更改项目的构建路径。以下代码设置项目资源的类路径:
IProject project = ... // get some project resource
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
(注意:术语“原始”类路径用来强调尚未解析任何用来描述条目位置的变量的事实。)
Java 构建路径保存在项目的文件结构中的名为“.classpath”的文件中。此文件可用来提供一种方法来通过某些源代码资源库与其它项目共享 Java 构建路径设置。需要特别指出的是,由于此文件可能会毁坏,所以不应该手工编辑它。
可以使用对 JavaCore 定义的工厂方法来定义类路径条目。类路径条目可以引用下列任何一项:
以下是指示项目“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
以下类路径条目具有源连接:
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
可能会注册自动的类路径变量初始化程序,当启动工作区时,通过扩展点 org.eclipse.jdt.core.classpathVariableInitializer 来调用该类路径变量初始化程序。
以下类路径条目指示一个库,该库的位置存放在变量“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
可能会注册一个自动的类路径容器初始化程序,当需要绑定容器时,通过扩展点 org.eclipse.jdt.core.classpathContainerInitializer 来被动地调用类路径容器初始化程序。
以下类路径条目指示系统类库容器:
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);
可以对类路径源条目指定排除模式,排除模式防止源文件夹中的特定资源在类路径中可见。对模式的使用允许过滤掉资源树的指定部分。每个排除模式路径都是相对于类路径条目的,并且使用与 Ant 相似的模式机制。只要外部模式排除内部模式,排除模式就可以用来指定嵌套的源文件夹。
关于排除模式的更多详细信息,参见 getExclusionPatterns()。
Java 项目 API isOnClasspath 在确定类路径是否包含特定资源之前将检查排除模式。