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/java
と src/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> ...