2008-05-27
Maven2で環境別にearファイルをビルドする
やりたいこと
Maven2を使って、環境ごとに構成を変えたearファイルを作りたい。
利用するテクニック
Maven2にはProfileという設定の切り替え機能があるので、それを利用して環境に応じたEARファイルをビルドします。今回はプロファイルを指定して切り替え可能にしたいので、activationは使わずにmvnコマンドの引数としてプロファイルを渡すようにします。
プロファイルの指定の仕方
mvn -P<プロファイル名> <ゴール名>
earの構成
earの構成は以下の通りです。テスト環境には開発環境とは違う構成を用意しています。
# 開発環境用 OrderService_Dev.ear +- OrderService.war +- OrderService_EJB.jar # テスト環境用 OrderService_Test.ear +- OrderService.war +- OrderService_EJB.jar +- OrderTestClient.war <-- こいつを追加したい
ビルド環境の準備
earをビルドするには、earプロジェクトと集約(アグリゲーション)プロジェクトの2つが必要になります。Eclipseで使うことも想定し、プロジェクトはフラットな構成としました。
Order_EAR_Build <-- ビルド用の集約プロジェクト +- pom.xml Order_EAR <-- earプロジェクト +- pom.xml +- src/main/java OrderService +- pom.xml +- src/main/java OrderService_EJB +- pom.xml +- src/main/java OrderTestClient +- pom.xml +- src/main/java
Order_EARのpom.xmlには、earに含まれるサブコンポーネントへの依存性を記述します。
<project> <modelVersion>4.0.0</modelVersion> <groupId>root.project</groupId> <artifactId>xxx_EAR</artifactId> <packaging>ear</packaging> <version>1.0</version> <name>xxx_EAR</name> <profiles> <!-- 開発環境用プロファイル --> <profile> <id>dev</id> <dependencies> <dependency> <groupId>aqvi</groupId> <artifactId>OrderService</artifactId> <version>1.0-SNAPSHOT</version> <type>war</type> </dependency> <dependency> <groupId>aqvi</groupId> <artifactId>OrderService_EJB</artifactId> <version>1.0-SNAPSHOT</version> <type>jar</type> </dependency> </dependencies> <build> <!-- 環境に応じて成果物の名前をカスタマイズ --> <finalName>OrderService_Dev</finalName> </build> </profile> <!-- テスト環境用プロファイル --> <profile> <id>test</id> <dependencies> <dependency> <groupId>aqvi</groupId> <artifactId>OrderService</artifactId> <version>1.0-SNAPSHOT</version> <type>war</type> </dependency> <dependency> <groupId>aqvi</groupId> <artifactId>Order_EJB</artifactId> <version>1.0-SNAPSHOT</version> <type>jar</type> </dependency> <dependency> <groupId>aqvi</groupId> <artifactId>OrderTestClient</artifactId> <version>1.0-SNAPSHOT</version> <type>war</type> </dependency> </dependencies> <build> <!-- 環境に応じて成果物の名前をカスタマイズ --> <finalName>OrderService_Test</finalName> </build> </profile> </profiles> <build> <plugins> <plugin> <artifactId>maven-ear-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> </manifest> </archive> </configuration> </plugin> </plugins> </build> </project>
次にOrder_EAR_Buildのpom.xmlには、earとそのサブコンポーネントをmoduleとして登録しておきます。
<project> <modelVersion>4.0.0</modelVersion> <groupId>aqvi</groupId> <version>1.0</version> <artifactId>EAR_Build</artifactId> <packaging>pom</packaging> <name>EAR_Build</name> <modules> <module>../OrderService</module> <module>../OrderService_EJB</module> <module>../OrderTestClient</module> <module>../OrderService_EAR</module> </modules> <profiles> <!-- 開発環境用プロファイル --> <profile> <id>dev</id> <modules> <module>../OrderService</module> <module>../OrderService_EJB</module> <module>../OrderService_EAR</module> </modules> </profile> <!-- テスト環境用プロファイル --> <profile> <id>test</id> <modules> <module>../OrderService</module> <module>../OrderService_EJB</module> <module>../OrderTestClient</module> <module>../OrderService_EAR</module> </modules> </profile> <dependencies> ... </dependencies> </project>
これで準備は完了です。
なおearのプロジェクトとビルド用の集約プロジェクトのプロファイルIDはそろえておく必要があります。
ビルドの実行
以下のコマンドで、それぞれの環境用の成果物をビルドします。
mvn -Pdev package mvn -Ptest package
参考になったサイト
トラックバック - http://d.hatena.ne.jp/aqvi/20080527/1211891360
リンク元
- 38 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=Hcu&q=fprintf+java+&btnG=検索&lr=lang_ja
- 28 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGIH_jaJP260JP260&q="<packaging>ear</packaging>"
- 26 http://d.hatena.ne.jp/TrinityT/20080516/1210908204
- 15 http://www.google.co.jp/search?client=firefox-a&rls=org.mozilla:ja:official&channel=s&hl=ja&q=earファイル 構成&lr=&btnG=Google+検索
- 10 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=maven+profile+jar+切り替え
- 10 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=pom.xml+maven+profile&num=50
- 9 http://www.google.co.jp/search?hl=ja&lr=lang_ja&tbs=lr:lang_1ja&q=pom+集約+dependency&aq=f&aqi=&aql=&oq=&gs_rfai=
- 9 http://www.google.co.jp/search?hl=ja&rls=GGIC,GGIC:1970--2,GGIC:ja&q=maven2+ear&btnG=検索&lr=&aq=t
- 9 http://www.google.co.jp/search?q=maven+プロファイル 切り替え&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 8 http://www.google.co.jp/search?hl=ja&q=earファイル&btnG=Google+検索&lr=