Hatena::ブログ(Diary)

とある誰かの覚え書き このページをアンテナに追加 RSSフィード

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

参考になったサイト

Maven2で環境に合わせて設定ファイルを切り替える方法(改訂版) - TrinityT’s LABO

POM ファイルを書こう! 其ノ七 - POM ファイルの集約とマルチプロジェクト機能 - 倭マン日記

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/aqvi/20080527/1211891360