Eclipse(より正確にはMyEclipse 10)で開発し、Maven3を使用してビルドするJavaWebアプリケーションプロジェクトがあります。
私は次のレイアウトを持っています(私の問題に関連するファイルのみを含みます:
project root
|-- src
| |-- main
| | |-- java
| | |-- resources
| | | |-- log4j.xml
| | | +-- struts.properties
| | |-- webapp
| | | |-- META-INF
| | | | +--context.xml
| | |-- config
| | | |-- test
| | | | |--log4j.xml
| | | | |--struts.properties
| | | | +--context.xml
| | | +-- prod
| | | | |--log4j.xml
| | | | |--struts.properties
| | | | +--context.xml
| +--test
+--pom.xml
ご覧のとおり、いくつかの構成ファイルを含めました。プロジェクト構造内の適切な場所にいる人、つまり内部src/main/resources
にsrc/main/webapp
いて、MyEclipseで作業するときに日常的に使用している人です。MyEclipseコネクターを使用して、デプロイメントを開発マシン上のTomcatインスタンスなどに自動的に更新できます。「サーバーの実行」をクリックするだけで、デバッグできます。実際には、このコンテキストでMavenを使用する必要はまったくありません。
次に、テストや本番環境などの別の環境用のリリースをビルドする場合は、実行するmvn -P test clean install
と、優れたWARがビルドされます。
私の目標は、最終的なWAR内の構成ファイルを。内の構成ファイルに置き換えることですsrc/config/{environment}/
。
私は自分のプロファイルを設定しましたpom.xml
:
<profiles>
<profile>
<id>test</id>
<properties>
<environment>test</environment>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<environment>prod</environment>
</properties>
</profile>
</profiles>
次に、これらのリソースを(変数を使用して)指定されたプロファイルからenvironment
WAR内の正しい場所(またはWARに圧縮される一時フォルダー)にコピーしようとします。
<webResources>
<resource>
<directory>/src/main/config/${environment}</directory>
<targetPath>META-INF/</targetPath>
<includes>
<include>context.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/config/${environment}</directory>
<targetPath>WEB-INF/classes/</targetPath>
<includes>
<include>
struts.properties
</include>
<include>
log4j.xml
</include>
</includes>
</resource>
</webResources>
「標準」リソースがこの後にディレクトリにコピーされることを除いて、これは機能しているように見えます。そのため、これらのファイルは上書きされます。だから私はいつも言うからのものの代わりに例えばlog4j.xml
からで終わるsrc/main/resources
src/main/configuration/prod/
Maven出力からの抽出:
[INFO] Processing war project
[INFO] Copying webapp webResources [D:\workspace\MyProject/src/main/config/prod] to [D:\workspaces\SITEL\Webfauna\target\Webfauna]
[INFO] Copying webapp webResources [D:\workspace\MyProject\src/main/config/prod] to [D:\workspaces\SITEL\Webfauna\target\Webfauna]
[INFO] Copying webapp resources [D:\workspace\MyProject\src\main\webapp]
最後の行でわかるように、からのものは後src/main/webapp
にコピーされるため、カスタムファイルが上書きされます:(
私の質問:Mavenに「アクティブ化されたプロファイルから」ファイルを使用させ、どういうわけか「自然な」ファイルを上書きする方法は?