このセクションでは、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 は、特定のリソースがクラスパスにあるかどうかを判別する前に、組み込みパターンおよび除外パターンの両方を確認します。
注釈:
IPath sourceFolder = new Path("/MyProject/src"); IPath outputLocation = sourceFolder.append("bin"); IClassPathEntry srcEntry = JavaCore.newSourceEntry( sourceFolder, // source folder location new Path[] { outputLocation }, // excluded nested folder outputLocation); // output location
クラスパス・ソース・エントリーに組み込みパターンを割り当てることもできます。 組み込みパターンは、クラスパスで可視にするリソースを明示的に定義します。 組み込みパターンが指定されない場合、ソース・エントリーは、関係のあるすべてのファイルを、 このソース・エントリーのパスがルートとなるリソース・ツリーに組み込みます。 1 つまたは複数の組み込みパターンを指定することは、リソース・ツリーのうち指定された部分だけを組み込むことを意味します。 指定する各パスは相対パスでなければならず、このソース・エントリーのパスに相対的に解釈されます。 ファイル・パターンには、大/小文字の区別があります。 このエントリーの除外パターンの 1 つまたは複数によって除外されないかぎり、 これらのパターンの 1 つまたは複数と一致するファイルが、対応するパッケージ・フラグメント・ルートに組み込まれます。
パス・パターンの構文およびセマンティクスについては、
getExclusionPatterns()
を参照してください。
組み込みパターンがない場合は、明示的な組み込みパターン **
と意味的に同等です。
Java プロジェクト API isOnClasspath は、特定のリソースがクラスパスにあるかどうかを判別する前に、組み込みパターンおよび除外パターンの両方を確認します。
例:
src/**
はそれ自体で、src
という名前のルート・フォルダーの下にある
すべてのファイルを組み込みます。
src/**
および tests/**
は、src
および tests
という名前のルート・フォルダーの下にあるすべてのファイルを組み込みます。
src/**
を排他パターン src/**/Foo.java
と一緒に指定すると、src
という名前のルート・フォルダーの下にある、Foo.java
という名前のもの以外のすべてのファイルを組み込みます。