Maven3 / Maven側でソースコード中の設定値を書き換える

Maven3 / Maven側でソースコード中の設定値を書き換える

環境ごとに設定が違ってそれをmaven側で吸収したい場合がある。 使っているフレームワークで吸収できる部分もあるが最終的には何かの設定の起点が必要になる。

ここをMaven設定によって切り替えるのだ。

書き換え対象を決める

書き換え対象を決める。pom.xmlに

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

と記述。

大体のプロジェクトではsrc/main/resourcesあたりに設定ファイル集が格納されるようになっているのでresourceは記述済になっていると思う

ここに

<filtering>true</filtering>

を追記して書き換え機能を使いますよ宣言をする

つまりsrc/main/resources以下のファイルを書き換えますよというわけ。

書き換え文字列を埋め込む

何を何に書き換えるかを指定する。

書き換え対象のファイルにプレースホルダとして

hoge_setting = ${maven.hoge.piyo.fuga}

みたいな記述を埋め込む。そうすると${maven.hoge.piyo.fuga}の部分がmaven側で指定した値に書き換えられるというわけだ

書き換え文字列を指定する

pom.xmlに

<project>
    ...
    <properties>
        <maven.hoge.piyo.fuga>aaaa</maven.hoge.piyo.fuga>
    </properties>
    ...
</project>

と記述する

properties要素の子要素のタグ名として置き換えたいプレースホルダに使った文字列を指定する。 その中身に実際に置換する値を入れる

そうすると実際には

hoge_setting = aaaa

という値になる。

自分の場合はmavenが書き換えてますよということを意識するため頭にmavenとつけている

書き換え実行

書き換え実行と言っても、別に実際に対象のファイルが書き換わるわけではなくコンパイルで使われる時に自動的に値に変換されたファイルが使われるだけだ。

なので特に何もする必要は無い

$ mvn package

とかやったら書き換え後の値を使ってコンパイルされる。

Eclipseプロジェクトとして使っていてコンパイルじゃねーんだという場合は

$ mvn resources:resources

とやればよい。

java/apache_maven/maven3/rewrite_setting_value_in_source.txt · 最終更新: 2020-11-04 16:30 by ore