EARファイル作成 part3
Webリソースの場所変更 webappからWebContent
先週悩んでいたWebContentの指定がうまくできました。
maven-war-pluginを利用することで、webResourceの設定を行う事ができました。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <warSourceDirectory>${basedir}/src/main/WebContent</warSourceDirectory> </configuration> </plugin> </plugins> </build>
こうする事で、Eclipseで作成されるWebプロジェクトの名称を特に変更することなくSubversionでの構成管理、Maven2でのビルドが行えそうです。
Webリソース追加
.classpath / .project /.websettingsのリソースファイルをWARに追加します。
同じく、maven-war-pluginを使用して次のように記述します。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <webResources> <resource> <directory>${basedir}/src/main</directory> <filtering>true</filtering> <includes> <include>.classpath</include> <include>.project</include> <include>.websettings</include> </includes> </resource> </webResources> </configuration> </plugin> </plugins> </build>
include要素で指定したファイルがWARファイルに取り込まれました。
# ls -a . .. .classpath .project .websettings META-INF WEB-INF css js jsp theme wsdl
MANIFESTファイルの指定
予め作成しているMANIFEST.MFを指定してパッケージを行います。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <archive> <manifestFile>src/main/WebContent/META-INF/MANIFEST.MF</manifestFile> </archive> </configuration> </plugin> </plugins> </build>
maven-war-pluginを使用して、manifestFile要素としてMANIFEST.MFを指定します。
EARのSourceDirectoryの設定
earのソースディレクトリを指定します。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-ear-plugin</artifactId> <configuration> <earSourceDirectory>${basedir}/src/main/</earSourceDirectory> <manifestFile>src/main/META-INF/MANIFEST.MF</manifestFile> </configuration> </plugin> </plugins> </build>
maven-ear-pluginを使用して設定します。earSourceDirectory要素にディレクトリを指定します。
WARの時と設定方法は全く同じです。
MANIFESTの設定は、archive要素を外して稼働しました。
WARファイルのEARへの取り込み
dependencyで取り込む対象のWARを設定します。
そして、そのWARに対してコンテキストルートと取り込んだ後のWARファイルの名前を設定します。
- bundleFileName
- WARファイルの名前を設定できます。設定しなかった場合、(artifactId) + (version)に自動的に設定されます。
WARファイルの名前を設定せずに、Version付きの名前を使用した場合、逐次application.xml等設定ファイルを修正する必要が発生します。
<dependencies> <dependency> <groupId>SAMPLE</groupId> <artifactId>SAMPLE-WAR</artifactId> <version>0.0.1</version> <type>war</type> <scope>compile</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-ear-plugin</artifactId> <configuration> <modules> <webModule> <groupId>SAMPLE</groupId> <artifactId>SAMPLE-WAR</artifactId> <contextRoot>/sample</contextRoot> <bundleFileName>sample.war</bundleFileName> </webModule> </modules> </configuration> </plugin> </plugins> </build>
maven-ear-pluginでcontextRoot要素とbundleFileName要素を使用します。
それぞれ、コンテキストルートとファイル名を指定します。
ただし、今回の場合、application.xmlをmavenで生成せずに、予め作成したものを取り込む形にしているので、ContextRootを設定する必要はないような気がしますが、とりあえず設定。