NetBeans Antプロジェクトをコマンドラインでビルドする¶
NetBeansでAntプロジェクトを作成し、それをNetBeansのない場所でビルドするには一工夫が必要です。
例えば、NetBeansで開発したプロジェクトをリポジトリに登録し、ビルドサーバー(Jenkins)でリポジトリからチェックアウトしAntでビルドすると、そのままではエラーとなってしまいます。
NetBeansのAntプロジェクトの構成¶
NetBeansでJavaのプロジェクトを作成すると、次のビルド関連ファイルが生成されます。
- 注意書き)説明上省略しているファイルがあります
<プロジェクト基点> +-- build.xml +-- nbproject +-- build-impl.xml +-- project.properties +-- private +-- private.properties <ユーザー固有ディレクトリ> +-- build.properties
ファイルの依存関係は、antコマンドが読み込みbuild.xmlから次のようになっています。
build.xml ---> build-impl.xml -+-> config.properties +-> private.properties +-> build.properties
- build.xmlからbuild-impl.xmlを参照している記述
<import file="nbproject/build-impl.xml"/>
- build-impl.xmlから各プロパティファイルを参照している記述
<property file="nbproject/private/config.properties"/> : <property file="nbproject/private/private.properties"/> : <property file="${user.properties.file}"/>
- private.propertiesの中に${user.properties.file}が定義
user.properties.file=C:\\Users\\torutk\\AppData\\Roaming\\NetBeans\\8.0\\build.properties
- build.propertiesには、ライブラリのJARファイルのパス等が定義
libs.junit_4.classpath=C:\\Program Files\\NetBeans 8.0\\platform\\modules\\ext\\junit-4.10.jar
NetBeansのAntプロジェクトでは、nbproject配下のprivateディレクトリはNetBeansを動かしている環境固有の設定なので、リポジトリへの登録対象とはしません。
privateディレクトリは、NetBeansでプロジェクトを開くと自動的に生成されます。
そのため、リポジトリから取得したプロジェクトをNetBeansではなくコマンドラインのantで実行すると、プロジェクトで使用しているライブラリのJARへのクラスパス設定が不足してコンパイルが通らない問題が生じます。
そこで、ビルドサーバーでビルドするときなどは必要な設定を補う必要があります。
Ant単独ビルドの方法¶
事例1)JUnitのテストを含むプロジェクトをビルド¶
Java SE標準ライブラリだけを使うプロジェクトであれば、NetBeansでなくコマンドラインだけでビルドできると思われますが、Antのデフォルトターゲットではテストがあるとそれもビルドしようとするので、JUnitのクラスが見つからないとエラーになります。リポジトリから取得したプロジェクト定義にはJUnitのライブラリが未定義です。
JUnit 4のJARファイルは、build.propertiesを見ると、
libs.junit_4.classpath=C:\\Program Files\\NetBeans 8.0\\platform\\modules\\ext\junit-4.10.jar
と記述されています。そこで、NetBeansがインストールされていないビルドサーバーなどでAntを実行する時は、プロパティlibs.junit_4.classpathをビルドサーバーに保持しているJUnitを指すように定義します。
JUnitのライブラリパスをコマンドラインで指定¶
JUnitのライブラリパスを示すプロパティをantのコマンドラインオプションで指定した例を次に示します。
$ ant -Dlibs.junit_4.classpath=/java/junit4.8.2/junit-4.8.2.jar
JUnitのライブラリパスを記述したプロパティファイルをコマンドラインで指定¶
NetBeansのない環境でビルドに必要なプロパティを定義したファイルを作成します。
次に、NetBeans環境ではprivate.propertiesの中で定義されるuser.properties.fileプロパティを、NetBeansのない環境ではコマンドラインで指定します。
- NetBeansのない環境でビルドするためのプロパティをci.propertiesに定義
libs.junit_4.classpath=/java/junit4.8.2/junit-4.8.2.jar
- antの実行
$ ant -Duser.properties.file=ci.properties
Ant単独実行¶
Javaアプリケーションプロジェクトの実行¶
Javaアプリケーションプロジェクトを実行します。
実行にあたっては、ビルド時に補完していたライブラリの設定に加えて、実行時の引数の設定を補完する必要があります。
D:\work> ant -Dlibs.RxJava_2.1.3.classpath="C:/Program Files/Java/rxjava/reactive-streams-1.0.1.jar;C:/Program Files/Java/rxjava/rxjava-2.1.3.jar" ^ -Dapplication.args="--mode performance --verbose"
- JVMオプション(run.jvmargs)は、nbproject/project.properties に定義されているので、コマンドライン上でant実行時には定義の補完は不要
- 実行時引数(application.args)は、nbproject/private/private.properties に定義されているので、コマンドライン上でant実行時には定義の補完が必要