2011-02-08 3 views
15

デプロイ可能なjarファイルを1つだけビルドすることが私たちの方針です。すべての環境固有の構成は別々に保たれ、すべてを一度に構築します。現在のAntプロセスの下では、各環境のプロパティファイルを用意してループし、環境ごとに一連の設定ファイルを作成します。Maven複数のプロファイルを一度に構築

私の現在のPOM XMLでは、コマンドラインで提供されているプロファイルを1つだけビルドすることができます。 Mavenを通して達成することは可能ですか?

はここで.....

感謝のpom.xml

<!-- Define profiles here and make DEV as default profile --> 
<profiles> 

    <!-- dev Profile --> 
    <profile> 
     <id>dev</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
    </profile> 

    <!-- qa Profile --> 
    <profile> 
     <id>qa</id> 
     <properties> 
      <env>qa</env> 
     </properties> 
    </profile> 

    <!-- prod Profile --> 
    <profile> 
     <id>prod</id> 
     <properties> 
      <env>prod</env> 
     </properties> 
    </profile> 

</profiles> 
... 


<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>2.4.3</version> 

    <executions> 
     <execution> 

      <phase>validate</phase> 
      <goals> 
       <goal>copy-resources</goal> 
      </goals> 

      <configuration> 

       <filters> 
        <filter>env/${env}.properties</filter> 
       </filters> 

       <outputDirectory>${project.build.directory}/config/${env} 
       </outputDirectory> 
       <resources> 
        <resource> 

         <filtering>true</filtering> 

         <directory>${basedir}/src/main/config/default 
         </directory> 
         <includes> 
          <include>*.xml</include> 
          <include>*.properties</include> 
         </includes> 
        </resource> 

の関連部分のいくつかである、 Prabhjot

+0

ここでは、この回避策について説明します。 https://stackoverflow.com/questions/12320322/build-multiple-artifacts-with-different-classifiers-at-once – stokito

答えて

19

Mavenは蟻のようではありません。アリでは、基本的には自分がやりたいときにやることができます。 Mavenを使用すると、明確で文書化されたbuild life cycleがあり、それは1つのコンポーネントをビルドすることを目的としています(そして、ビルドに他のアーティファクトを付ける可能性があります)。

しかし、1つのコンポーネントを複数回構築するのは、異なるパラメータを使用することです。これは、Mavenライフサイクルには適合しません。だから、あなたがする必要があるのは、いくつかの外部プロセスに繰り返しを行い、別のパラメータで繰り返しmavenを呼び出させることです。

これを達成する典型的な方法は、シェルスクリプトを使用することですが、Maven Invokerを使用してJavaコンテキストまたはMavenコンテキストから別のプロセスを起動することもできます。