いちいち設定ファイルを環境用に書きなおしてビルドするのは大変です。
今回はmavenの「プロファイル」という機能を使って環境ごとのプロパティファイルを用意しmavenコマンドでデプロイするファイルを操作したいと思います
■環境
CentOS release 6.3 (Final)
Apache Maven 3.1.1
java version "1.6.0_24"
Apache Maven 3.1.1
java version "1.6.0_24"
■プロジェクト作成
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.kakakikikeke.test -DartifactId=sampleProject
※バージョン情報やスナップショットファイル名は適当に設定します
※groupIdやartifactIdは適宜変更して問題ございません
※バージョン情報やスナップショットファイル名は適当に設定します
※groupIdやartifactIdは適宜変更して問題ございません
■pom.xml編集
1. 環境ごとの設定を追加
2. 環境ごとのディレクトリと設定ファイルを作成
3. コピーするルールを記載する
4. テストしてみる
dependenciesタグの直後に以下を記載します
dev, stg, serviceごとにプロファイルを作成します
プロファイルごとに「configFileDirectory」という名前のプロパティ名が異なる点がポイントです
properties機能は変数のような機能で「${configFileDirectory}」とすることで値を参照することができます
今回は「configFileDirectory」としていますが好きな変数名を設定することが可能です
dev, stg, serviceごとにプロファイルを作成します
プロファイルごとに「configFileDirectory」という名前のプロパティ名が異なる点がポイントです
properties機能は変数のような機能で「${configFileDirectory}」とすることで値を参照することができます
今回は「configFileDirectory」としていますが好きな変数名を設定することが可能です
<profiles>
<profile>
<id>dev</id>
<properties>
<configFileDirectory>dev</configFileDirectory>
</properties>
</profile>
<profile>
<id>stg</id>
<properties>
<configFileDirectory>stg</configFileDirectory>
</properties>
</profile>
<profile>
<id>service</id>
<properties>
<configFileDirectory>service</configFileDirectory>
</properties>
</profile>
</profiles>
2. 環境ごとのディレクトリと設定ファイルを作成
mkdir -p conf/dev
mkdir -p conf/stg
mkdir -p conf/service
echo "dev" > conf/dev/config.properties
echo "stg" > conf/stg/config.properties
echo "service" > conf/service/config.properties
※今回はテストなので適当な設定ファイルを用意します
mkdir -p conf/stg
mkdir -p conf/service
echo "dev" > conf/dev/config.properties
echo "stg" > conf/stg/config.properties
echo "service" > conf/service/config.properties
※今回はテストなので適当な設定ファイルを用意します
3. コピーするルールを記載する
先ほど記載したprofilesタグの直後に記載します
「maven-resources-plugin」を利用してファイルをコピーします
ポイントは
またdirectoryタグに「conf/${configFileDirectory}」と記載することで、プロファイルで設定された「${configFileDirectory}」を元に適切なディレクトリ配下からプロパティファイルをコピーし、outputDirectory配下にファイルを配置することができます
「maven-resources-plugin」を利用してファイルをコピーします
ポイントは
- phaseタグで「compile」を指定している点
- directoryタグで「conf/${configFileDirectory}」を指定している点
またdirectoryタグに「conf/${configFileDirectory}」と記載することで、プロファイルで設定された「${configFileDirectory}」を元に適切なディレクトリ配下からプロパティファイルをコピーし、outputDirectory配下にファイルを配置することができます
<build>
<plugins>
<!-- for resources copy -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>compile</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>conf/${configFileDirectory}</directory>
<filtering>true</filtering>
</resource>
</resources>
<outputDirectory>conf</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
4. テストしてみる
mvn clean compile -P service
として実行すると
conf/client.propertiesにはserviceと記載されたプロパティファイルが配置されていることがわかります
「-P profile_name」
とすることでプロファイルを変更することができますので「dev」や「stg」と変更して実行することでconf/client.properties配下の内容が変わっていることがわかると思います
として実行すると
conf/client.propertiesにはserviceと記載されたプロパティファイルが配置されていることがわかります
「-P profile_name」
とすることでプロファイルを変更することができますので「dev」や「stg」と変更して実行することでconf/client.properties配下の内容が変わっていることがわかると思います
■Tips
複数のディレクトリ配下のファイルをコピーしたい場合は</execution>タグを複数記載すればOKです
その場合「id」タグの情報が重複すると怒られるので「copy-resources-2」などとすれば大丈夫です
その場合「id」タグの情報が重複すると怒られるので「copy-resources-2」などとすれば大丈夫です
0 件のコメント:
コメントを投稿