MavenのResourceFilteringを使い、production、staging、developmentとかで環境別ビルドしている時、ある環境ビルドの時だけ特定のライブラリを追加する、をmvnビルド時に自動化出来るようにします。
環境
- java8
- maven3
実現方法
profileの中にdependenciesを入れ子に出来ます。
このスコープで登録されたdependencyは他の環境ビルドに影響しません。
<profiles>
<profile>
<id>development</id>
:
</profile>
<profile>
<id>staging</id>
<properties>
<jdbc.url>jdbc:postgresql://192.168.122.69:9999/hoge</jdbc.url>
<jdbc.username>hoge</jdbc.username>
<jdbc.password>hoge</jdbc.password>
:
<proxy.use>true</proxy.use>
<proxy.host>10.83.182.192</proxy.host>
<proxy.port>8081</proxy.port>
</properties>
<dependencies>
<dependency>
<groupId>org.javolution</groupId>
<artifactId>javolution</artifactId>
<version>5.3.1</version>
</dependency>
</dependencies>
</profile>
:
まとめ
開発期間が並走する、違うチームの開発jarと結合する場合、developmentではローカル作成したモックを使い、stagingでは開発された正式バージョンを使う。といった開発ルールにも適用出来ますね。
<profiles>
<profile>
<id>development</id>
<dependencies>
<dependency>
<groupId>jp.co.awesomeapp</groupId>
<artifactId>aaa_dev</artifactId>
<version>1.0-SNAPSHOT</version>
<type>jar</type>
</dependency>
</dependencies>
<build>
<finalName>awesomeapp_dev</finalName>
</build>
</profile>
<profile>
<id>staging</id>
<dependencies>
<dependency>
<groupId>jp.co.awesomeapp</groupId>
<artifactId>aaa</artifactId>
<version>1.0</version>
<type>jar</type>
</dependency>
</dependencies>
<build>
<finalName>awsomeapp</finalName>
</build>
</profile>
</profiles>