環境依存の設定がべた書きされたソースだってmavenで環境ごとにビルドしたい
今のプロジェクトではWEBサービスクライアントのソースにWEBサービスのnamespaceやらパスやらがべた書きされている。
それを環境ごとに使い分けるため、環境ごとにその環境専用のSVNのブランチを切り、WEBサービスクライアントに環境に応じたnamespaceやらパスやらをべた書きしている(書く環境に同じ名前の、違う内容のソースがいる!)。
そういうわけで何か修正が発生するたびに、全環境のブランチににそれを反映するという何とも前近代的なオペレーションが発生してしまう。
こいつを何とか打破したい。
ただし本番環境用のWEBサービスは本番稼動中なのでテストで使用することができない。
したがって、それぞれを別々のクラスにして設定ファイルで環境に応じてDIするという手は採用できず、残る方法はバイナリレベルで現在と同じWARを作成できることを証明するしかない。
pom.xml
<profiles> <profile> <id>development</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <buildHelper.addSource>src/development/java</buildHelper.addSource> </properties> </profile> <profile> <id>production</id> <properties> <buildHelper.addSource>src/production/java</buildHelper.addSource> </properties> </profile> </profiles> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>${buildHelper.addSource}</source> </sources> </configuration> </execution> </executions> </plugin> </plugins> </build>
src/development/javaには開発環境用の設定がべた書きされたWEBサービスクライアントを、src/production/javaには本番環境用の設定がべた書きされたWEBサービスクライアントを配置する。
src/development/javaはeclipseでソースフォルダとして登録しておくが、src/production/javaはソースフォルダとして登録しないでおく。
そうすれば同じ名前のソースが複数あると怒られることはない。
src/production/javaの下のソースはEclipseはコンパイルしてくれないが、ほぼ修正することはないし、前近代的オペレーションを続行するよりはよほどましでしょう。