最終更新日:180901 原本2017/08/04 

Maven:warの作成

Maven の War Plugin を使って、war を作成する方法を書いていきます。

1. pom.xml の作成

pom.xml を作成して、packaging タグの値を war にします。

  <groupId>com.github.mamorum</groupId>
  <artifactId>kaze-sample-war</artifactId>
  <version>0.2.3</version>
  <packaging>war</packaging>

war にすると War Plugin でパッケージングしてくれます。

2. ディレクトリ構成について

Java コードとリソースファイルはいつものディレクトリに置きます。War 資源(HTML, CSS, JS, テンプレート, etc)は src/main/webapp 配下に置きます。

kaze-sample-war/
  - pom.xml
  - src/
    - main/
      - java/.../MainServlet.java
      - webapp/
        - WEB-INF/...
        - index.html
      ...

3. パッケージング

次のコマンドで war が作成されます。

mvn package

war の中身はこんな感じです。

war/
  - WEB-INF/
    - classes/.../MainServlet.java
    - lib/...
    ...
  - index.html
  ...

src/main/javasrc/main/resources の資源は WEB-INF/classes 配下に配置されます。src/main/webapp の資源は war 直下に配置されます。

補足1. War Plugin と web.xml

web.xml を使わない場合、War Plugin は 3.1.0 以降を使うと良さそうです。

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.1.0</version>
      </plugin>
      ...

それ以前のバージョン(デフォルト設定)は、web.xml がないとビルドでエラーが発生します。

補足2. War の名前について

名前を変えたい場合、build/finalName タグを使います。

  <build>
    <finalName>kaze-sample</finalName>
    ...

上の場合だと、kaze-sample.war という名前で作成されます。

補足3. 依存性について

pom.xml の dependencies に追加した依存性は、パッケージングで war の WEB-INF/lib に配置されます。

war に含めたくないもの(例:Servlet API)は、provided スコープを利用すると便利そうでした。

  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    ...