本章節說明如何設定 Java 建置路徑,亦即, 在建置 Java 專案時所用的類別路徑。 類別路徑是一個類別路徑項目的陣列, 用以說明可採原始檔或二進位形式(用以尋找可用的類型)的類型。 這些項目的排列順序將決定可用類型的優先順序。
Java 建置路徑也可用來管理 Java 專案元素的結構, 這是因為所有套件片段 root 皆直接衍生自 Java 建置路徑(每一個項目分別對映至一或多個套件片段 root, 請參閱 getPackageFragmentRoots)。
本章節未涵蓋可個別定義的 Java 執行時期路徑,有關如何執行 Java 程式的說明, 請參閱相關章節。
您可以透過程式設計方式,
將 setRawClasspath
用於對應專案的 Java 元素上,以變更專案的建置路徑;例如:
IProject project = ... // 取得部份專案資源
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 建置路徑, 例如,當計算專案套件片段 root 時,需要解析建置路徑。