本章節說明如何設定 Java 建置路徑。建置路徑即是類別路徑, 用於建置 Java 專案 (IJavaProject)。
類別路徑僅是類別路徑項目的陣列 (IClassPathEntry), 用來說明可用的類型。類型可以原始檔或二進位碼形式出現, 而且路徑上項目的次序定義了在建置期間解析類型所用的查閱次序。
Java 建置路徑反映在 Java 專案元素的結構中。 您可以查詢專案以取得其套件片段的根目錄 (IPackageFragmentRoot)。 每一個類別路徑項目都對映至一個或多個套件片段根目錄,它們之中的每一個都另外含有一組套件片段。
建置路徑的這個討論不包括 Java 執行時期路徑,因為您可以從建置路徑個別定義它。 (如需執行時期類別路徑的討論,請參閱執行 Java 程式碼。
您可以透過程式設計方式,將 setRawClasspath
用於對應專案的 Java 元素上,以變更專案的建置路徑。
下列程式碼設定專案資源的類別路徑:
IProject project = ... // 取得部份專案資源
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
(附註:使用 "raw" 類別路徑這個詞彙是用來強調以下的事實: 並未解析任何用來說明項目位置的變數。)
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, //沒有原始檔
null, //沒有原始檔
false); //未匯出
下列類別路徑項目具有一個原始檔附件:
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("d:/lib/foo.jar"), // 程式庫位置
new Path("d:/lib/foo_src.zip"), //原始檔保存檔位置
new Path("src"), //原始檔保存檔根路徑
true); //已匯出
原始檔保存檔根路徑說明原始檔保存檔內的根目錄位置。 如果設為 null,將以動態方式推斷保存檔的根目錄。
下列類別路徑項目表示必備專案 'MyFramework'。
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); //已匯出
您可以登錄一個自動執行的類別路徑變數起始設定程式, 以便在啟動工作區時,經由org.eclipse.jdt.core.classpathVariableInitializer 延伸點呼叫。
下列類別路徑項目表示位置保存在 'HOME' 變數的程式庫。
原始檔附件是使用 'SRC_HOME' 和 'SRC_ROOT' 變數定義的:
IClassPathEntry varEntry = JavaCore.newVariableEntry(
new Path("HOME/foo.jar"), // 程式庫位置
new Path("SRC_HOME/foo_src.zip"), //原始檔保存檔位置
new Path("SRC_ROOT"), //原始檔保存檔根路徑
true); //已匯出
JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null); // 沒有進度
您可以登錄一個自動執行的類別路徑儲存器起始設定程式, 以便在需要連結儲存器時,經由 org.eclipse.jdt.core.classpathContainerInitializer 延伸點延遲呼叫。
下列類別路徑項目表示系統類別庫儲存器:
IClassPathEntry varEntry = JavaCore.newContainerEntry(
new Path("JDKLIB/default"), // 儲存器 'JDKLIB' + 提示 'default'
false); //未匯出
JavaCore.setClasspathContainer(
new Path("JDKLIB/default"),
new IJavaProject[]{ myProject }, //'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 會在判定特殊資源是否位在類別路徑之前檢查排除型樣。