2013-08-08 7 views
5

私のプロジェクトでpropertiesディレクトリがあります:ディレクトリ内のファイルをループ処理する方法と、各ファイル名に基づいていくつかのタスクを実行する方法はありますか?

properties 
    - project_dev.properties 
    - project_test.properties 
    - project_prod.properties 
    - project_other.properties 

異なるenviromentsのためのいくつかの異なる値を定義します。 templateディレクトリもあります。このディレクトリには、プレースホルダ付きの設定ファイルテンプレートがいくつか含まれています。

私がしたいのは、すべてのファイルをpropertiesにループし、それぞれをtemplateディレクトリに結合して、ファイル名に基づいて異なるディレクトリの下にある最終設定ファイルを生成することです。

だから、次のようになります。

target 
    - configurations 
     - dev 
      - ... some files 
     - test 
      - ... some files 
     - prod 
      - ... some files 
     - other 
      - ... some files 

私が今やっていることはmaven-resources-pluginを使用して、ファイルごとにいくつかのexecution Sを定義して、ハードコードされた名前です。

ように見えます:あなたは、私はファイルごとにexecutionブロックをコピーしていますので、わずかな違いを持つ多くの重複コードがあるだろう見ることができます

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
     <version>2.6</version> 
     <executions> 
      <!--- for dev ----> 
      <execution> 
       <id>dev-filter</id> 
       <phase>validate</phase> 
       <goals> 
        <goal>copy-resources</goal> 
       </goals> 
       <configuration> 
        <encoding>UTF-8</encoding> 
        <outputDirectory>${basedir}/target/conf/dev</outputDirectory> 
        <useDefaultDelimiters>false</useDefaultDelimiters> 
        <resources> 
         <resource> 
         <directory>${basedir}/conf/template</directory> 
         <filtering>true</filtering> 
         <includes> 
          <include>channel/*</include> 
          <include>rule-config/*</include> 
          <include>server/*.properties</include> 
         </includes> 
         </resource> 
        </resources> 
        <delimiters> 
         <delimiter>${*}</delimiter> 
        </delimiters> 
        <filters> 
         <filter>${basedir}/properties/project_dev.properties</filter> 
        </filters> 
       </configuration> 
      </execution> 
      <!--- for prod ----> 
      <execution> 
       <id>prod-filter</id> 
       <phase>validate</phase> 
       <goals> 
        <goal>copy-resources</goal> 
       </goals> 
       <configuration> 
        <encoding>UTF-8</encoding> 
        <outputDirectory>${basedir}/target/conf/prod</outputDirectory> 
        <useDefaultDelimiters>false</useDefaultDelimiters> 
        <resources> 
         <resource> 
         <directory>${basedir}/conf/template</directory> 
         <filtering>true</filtering> 
         <includes> 
          <include>channel/*</include> 
          <include>rule-config/*</include> 
          <include>server/*.properties</include> 
         </includes> 
         </resource> 
        </resources> 
        <delimiters> 
         <delimiter>${*}</delimiter> 
        </delimiters> 
        <filters> 
         <filter>${basedir}/properties/project_prod.properties</filter> 
        </filters> 
       </configuration> 
      </execution> 
      <!--- for test ---> 
      ... 

物事を簡単にするソリューションはありますか?私はpropertiesの下にファイルをループする方法を見つけようとし、それぞれのためにfilterタスクを実行しますが、それを行う方法がわかりません。このような目的のために

答えて

6

A簡単な解決策は、ドキュメントも含まれているあなたのニーズに非常に似てexampleIterator-maven-plugin

<plugin> 
    <groupId>com.soebes.maven.plugins</groupId> 
    <artifactId>iterator-maven-plugin</artifactId> 
    <version>0.1.0</version> 
    <executions> 
    <execution> 
     <phase>package</phase> 
     <goals> 
     <goal>executor</goal> 
     </goals> 
     <configuration> 
     <items> 
      <item>dev</item> 
      <item>test</item> 
      <item>prod</item> 
     </items> 

     <pluginExecutors> 
      <pluginExecutor> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>2.6</version> 
      </plugin> 
      <goal>copy-resources</goal> 
      <configuration> 
       <outputDirectory>${basedir}/target/conf/@[email protected]</outputDirectory> 
       <useDefaultDelimiters>false</useDefaultDelimiters> 
       <resources> 
        <resource> 
        <directory>${basedir}/conf/template</directory> 
        <filtering>true</filtering> 
        <includes> 
         <include>channel/*</include> 
         <include>rule-config/*</include> 
         <include>server/*.properties</include> 
         </includes> 
        </resource> 
        </resources> 
        <delimiters> 
         <delimiter>${*}</delimiter> 
        </delimiters> 
        <filters> 
         <filter>${basedir}/properties/[email protected]@.properties</filter> 
        </filters> 
       </configuration> 
      </pluginExecutor> 
     </pluginExecutors> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

です。

それとは別に、私はあなたのポンポンファイルの次のプロパティを使用することをお勧め:

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

あなたはMavenの資源・プラグインごとに個別のエンコーディングを定義する必要はありません以上。

関連する問題