Eclipse上で大規模な開発を行う場合、開発内容を機能ごとに分割し、独立したプロジェクトを作成する場合が多いでしょう。そのようなときに、あるプロジェクトから別のプロジェクトにあるファイル(例えばjarファイル)の参照が必要なことがあります。
Eclipseのプロジェクトは、デフォルトではファイルシステム上のある特定のパスの直下に作成されます(Windowsでは、Eclipseのインストール先ディレクトリにあるworkspaceディレクトリの下)。すべてのプロジェクトがこのパスの直下にあれば、「../プロジェクト名」という相対パスで任意のプロジェクトにアクセスすることができます。
しかし、開発が進んでプロジェクトのファイルサイズが膨大になってくると、ディスク容量の制約などの理由から、すべてのプロジェクトが同一パスの直下に置かれていないというケースが起こることがあります。このような場合でもファイルを参照できるようにするには、プロジェクトがファイルシステム上のどこに格納されているかを絶対パスで知る必要があります。
その点、Eclipseでは、Javaプログラムのビルドや実行を行う際にビルドパスやクラスパスにほかのプロジェクトのファイルが含まれていると、動的に絶対パスへの変換を行ってくれます。そのため、プロジェクトの絶対パスについてユーザーが特に意識する必要はありません。しかし、Eclipse上でAntを起動し、Antスクリプト上からほかのプロジェクトのファイルを参照する場合は、そのプロジェクトが置かれている絶対パスを明示的に取得する必要があります。これには、eclipse.convertPathタスクを使用します。
解説
eclipse.convertPathタスクは、Eclipseのリソースパス(/プロジェクト名、または/プロジェクト名/プロジェクト内の相対パス)から、そのリソースが格納されているファイルシステム上の絶対パスを取得し、指定されたプロパティにセットします。逆に、ファイルシステム上の絶対パスまたは相対パスから、リソースパスを取得することもできます。
eclipse.convertPathタスクで使用できる属性は、以下のとおりです。
属性名 | 内容 | 必須 | |
---|---|---|---|
resourcePath | リソースパス(/プロジェクト名、または/プロジェクト名/プロジェクト内の相対パス) | resourcePathまたはfileSystemPathのいずれかが必須 | |
fileSystemPath | ファイルシステムの絶対パス名、または相対パス | ||
property | セットするプロパティ名 | 必須 |
eclipse.convertPathタスクは、Eclipse上でAntを実行したときにのみ有効で、eclipse.runningプロパティがセットされているかを確認することで、eclipse上でAntが実行されたかどうかを確認することができます。
Eclipse上のsample1プロジェクトにあるAntスクリプト(build.xml)を実行した際、eclipse.convertPathタスクを使用して、sample2プロジェクトの絶対パスとカレントディレクトリのリソースパスを取得するサンプルプログラムを以下に示します。
<?xml version="1.0" encoding="Shift_JIS"?> <project name="hello" default="convertPath"> <target name="convertPath"> <fail unless="eclipse.running" message="Eclipse上でAntを実行してください"/> <eclipse.convertPath resourcePath="/sample2" property ="sample2.dir"/> <echo message="sample.jarは ${sample2.dir}/lib /sample.jar にあります"/> <eclipse.convertPath fileSystemPath="." property="sample1.dir"/> <echo message="カレントディレクトリのリソースパスは ${sample1.dir} です"/> </target> </project>
このサンプルプログラムを実行すると、結果は以下のようになります。
Buildfile: C:\workspace\sample1\build.xml convertPath: [echo] sample.jarは d:\workspace2\sample2/lib/sample.jar にあります [echo] カレントディレクトリのリソースパスは /sample1 です BUILD SUCCESSFUL Total time: 172 milliseconds
以下は、このサンプルプログラムのEclipse上での実行結果です。
Copyright © ITmedia, Inc. All Rights Reserved.