minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

Mavenには、フィルタリング(Filtering)という概念があります。
簡単に言えば、ビルド時に動的なテキスト置換を行うことです。

例えば、リソースファイルに

# application.properties
application.name=${pom.name}
application.version=${pom.version}

のような形式の記述があった場合にそれを

# application.properties
application.name=Maven Quick Start Archetype
application.version=1.0-SNAPSHOT

に置き換えてビルドを行います。
もちろん、通常のファイルでフィルタリングをしては困るので
デフォルトではこのフィルタ機能はOFFになっています。

フィルタ機能を有効にするには、pom.xml の resource 要素の中で定義します。

<project>
  ...
  <build>
    ...
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>
</project>

上の例では、src/main/resources 以下にあるファイルで
フィルタリングが有効になります。

リソース内でのフィルタリング記述法は一貫して

${property_name}

となります。
property_name には、いくつかのプロパティ名が使えます。

pom.xml内の要素

例えば、pom.xml 内に以下のような記述があった場合。

<project>
  <version>1.0-SNAPSHOT</version>
  <build>
    <finalName>myapp-snapshot.txt<finalName>
  </build>
</project>

${pom.version} は Maven Quick Start Archetype に、
${pom.build.finalName} は myapp-snapshot.txt に置換されます。

外部ファイルのプロパティ

任意のプロパティを外部ファイル内で定義する方法です。

<project>
  <build>
    <filters>
      <filter>src/main/filters/filter.properties</filter>
    </filters>
  </build>
</project>

このように、filters要素で外部プロパティファイルを定義します。
filter.properties の内容が以下のようになっているとします。

# filter.properties
my.filter.value=hello!

${my.filter.value} は hello! に置換されます。

pom.xml内のproperties要素

任意のプロパティをpom.xml内で定義する方法です。

<project>
  <properties>
    <my.filter.value>hello</my.filter.value>
  </properties>
</project>

置換結果は上と同じになります。

環境変数

任意の環境変数も使うことが出来ます。
この場合、環境変数はMaven実行時にコマンドラインから渡すことになります。

% mvn process-resources "-Dmy.filter.value=hello"