MavenマルチモジュールJavaEE6アプリがあるとします。
foobar/
foobar-ear/
src/
main/
application/
META-INF/
MANIFEST.MF
glassfish-application.xml
glassfish-resources.xml
filters/
dev.properties
prod.properties
test.properties
pom.xml
foobar-web/
foobar-ejb/
pom.xml
ご覧のとおり、私はリソースフィルタリングを使用しています。foobar-earのpomは、ビルドプロファイルを定義します。
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<env>test</env>
</properties>
</profile>
<profile>
<id>demo</id>
<properties>
<env>demo</env>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<env>prod</env>
</properties>
</profile>
</profiles>
また、各子プロジェクトのpomはリソースフィルタリングを定義します。foobar-ear / pom.xmlの場合:
<build>
...
<filters>
<filter>src/main/filters/${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/application</directory>
<filtering>true</filtering>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/application</directory>
<filtering>false</filtering>
<excludes>
<exclude>**/*.xml</exclude>
</excludes>
</resource>
</resources>
...
</build>
ここでの目的は、フィルタープロパティファイルで定義されているJDBCおよびJavaMail構成アイテムのプレースホルダーを含むfoobar-ear / src / main / application / META-INF/glassfish-resources.xmlをフィルター処理することです。
を使用してビルドするmvn -Pdev clean install
と、foobar-earで次の出力が得られます。
foobar-ear/
target/
classes/
META-INF/
MANIFEST.MF
glassfish-application.xml
glassfish-resources.xml <- This one is filtered
foobar-ear/
META-INF/
MANIFEST.MF
glassfish-application.xml
glassfish-resources.xml <- This one is NOT filtered
lib/
foobar-ejb.jar
foobar-web.war
application.xml
foobar-ear.ear <- ear file. Contents same as foobar-ear/
ご覧のとおり、通常の出力場所にコピーされたリソースはフィルタリングされますが、EARディレクトリレイアウトとearファイルのリソースはフィルタリングされません。