アプリケーションの開発中、開発用のモジュールとリリース用のモジュールで、設定ファイル等を書き換えたいというケースは多いと思う。代表的な例だとDBへの接続。開発中はJDBCのDriverManagerで接続し、リリース時はJNDIからDataSourceを取得とか。
Maven2ではそういった環境に依存する設定をProfileという概念で環境毎に定義できる。pom.xmlに
<profiles> <profile> <id>release</id> <properties> <maven.test.skip>true</maven.test.skip> </properties> </profile> </profiles>
と追加し、
mvn install -P release
とPオプションでプロファイルを選択して実行する。上の例では、単体テストがスキップされる。
で、やりたいのはリソースファイルの切り替えなので、releaseのプロファイルに
今回、データベースの設定はapplicationContext.xmlに記載しており、開発時はorg.springframework.jdbc.datasource.DriverManagerDataSourceを使用し、リリース時は、org.springframework.jndi.JndiObjectFactoryBeanを使用する。開発用のapplicationContext.xmlはsrc/main/webapp/WEB-INF直下に配置し、リリース用のapplicationContext.xmlはsrc/release/webapp/WEB-INFというフォルダ構成で配置する。で、pom.xmlを
<profiles> <profile> <id>release</id> <properties> <maven.test.skip>true</maven.test.skip> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <webResources> <resource> <directory>src/release/webapp</directory> </resource> <resource> <directory>src/main/webapp</directory> </resource> </webResources> </configuration> </plugin> </plugins> </build> </profile> </profiles>
maven-war-pluginでWebアプリケーションのリソースファイルの配置場所が
最初は、mvnの実行前にantで書き換えるしかないのか?とか思ったが、Maven単体でクローズできるのが良い。