このセクションでは、Java のビルド・パスを設定する方法を説明します。 ビルド・パスとは、Java プロジェクト (IJavaProject) のビルドに使用されるクラスパスです。
クラスパスは、使用可能な型を記述するクラスパス・エントリー (IClassPathEntry) の 配列です。 型はソースまたはバイナリー形式で表示でき、パスのエントリーの順序によって、 ビルド時に型を解決するためのルックアップ順序が定義されます。
Java のビルド・パスは、Java プロジェクト・エレメントの構造に反映されます。 パッケージ・フラグメント・ルート (IPackageFragmentRoot) についてプロジェクトを照会できます。 それぞれのクラスパス・エントリーは 1 つ以上のパッケージ・フラグメント・ルートにマップされます。 さらに、それぞれのパッケージ・フラグメント・ルートにはパッケージ・フラグメントのセットが含まれます。
ビルド・パスについてのこの説明には、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 は、特定のリソースがクラスパスにあるかどうかを判別する前に排他パターンを確認します。