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.xmlmavenで生成せずに、予め作成したものを取り込む形にしているので、ContextRootを設定する必要はないような気がしますが、とりあえず設定。