プロジェクト

全般

プロフィール

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実行時には定義の補完が必要