Seasar2.4とMaven、開発環境、本番環境、そしてenv.txt

Seasar2.4からenv.txtに環境名を書くことによってそれぞれの環境別の制御をおこなうことが出来るようになっているらしい。
S2Container
HOT reloadingもここ(env.txt)に書いている値を見て有効か無効か判断しているらしい。(ちなみにenv.txt内に「ct」と書いている場合HOT reloadingがきく)そして、このファイルがない場合はproductionモードで動作する。開発環境ではctで使い、本番環境ではこれを削除しておけばいい。

今回、Mavenを使ってパッケージング(war)しているんだけど、その時このenv.txtを削除するように設定してやれば一番簡単にいきそう。ってことで調べるとすぐ出てきた。

[CUBBY-170] Archetypeで作成した雛形にMavenからWarのビルド時にenv.txtを置き換えるMaven2設定を追加 - The Seasar Foundation Issues (Deprecated)

pom.xmlにent.txtを削除する設定をいれてやるだけ。これで、packageを行うとwarファイルからきれいにenv.txtが消えてました。
(以下は上記URLより引用)

<plugin>
	<artifactId>maven-antrun-plugin</artifactId>
	<executions>
		<execution>
			<phase>process-resources</phase>
			<configuration>
				<tasks>
					<delete file="${project.build.outputDirectory}/env.txt" />
				</tasks>
			</configuration>
			<goals>
				<goal>run</goal>
			</goals>
		</execution>
	</executions>
</plugin>

ちなみに「process-resources」フェーズでやるって設定があるけど、フェーズには以下のようなものがあるらしい。パッケージする前だったらどこでもよかったりすんじゃろうかー。prepare-packageとか、それっぽいね。
Maven – Introduction to the Build Lifecycle

追記

やっぱり上記phaseの部分は「prepare-package」とかにしておかないと、Eclipse上で普通にビルドしたときにも削除されてしまうっぽい。「prepare-package」でパッケージングする前に削除すればいいかな。Eclipseでビルドするときもちゃんとpom.xmlの中身実行されるんだね。当たり前か〜。

追記2

prepare-packageはMaven2.1以上じゃないとだめみたい?てことは、フェーズは「test」になるのか・・(うちの環境はMaven2.0系)。なんて微妙な位置に・・。testスキップされたらダメなんだよねきっと。ということで、今回のプロジェクトではtestスキップ禁止。