Maven で war ファイルを作成する
Maven で war ファイルを作成してみたので、メモしておきます。
war ファイルを作成するプラグインがあるので、こいつを使ってます。
・Apache Maven WAR Plugin – Introduction
< http://maven.apache.org/plugins/maven-war-plugin/ >
・Apache Maven WAR Plugin – Usage
< http://maven.apache.org/plugins/maven-war-plugin/usage.html >
1. プロジェクトを作成する
まずは、以下のコマンドでプロジェクトを作成する。
mvn archetype:generate -DgroupId=com.example -DartifactId=web-app -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
Web アプリケーションになるので、Archetypes には "maven-archetype-webapp" を指定します。
・Maven – Introduction to Archetypes
< http://maven.apache.org/guides/introduction/introduction-to-archetypes.html >
以下のようなディレクトリが作成されるはずです。
└── web-app ├── pom.xml └── src └── main ├── resources └── webapp ├── WEB-INF │ └── web.xml └── index.jsp
2. Web アプリケーションに必要なファイル等を作成する
サーブレット ( HelloServlet ) の追加と、web.xml を編集しました。
■ HelloServlet.java ( main/java/com/example 配下に作成する )
package com.example; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet extends HttpServlet { public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { PrintWriter out = res.getWriter(); out.println("<html><body>"); out.println("<h1>Hello Servlet !!</h1>"); out.println("</body></html>"); } }
■ web.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.example.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
3. pom.xml を編集する
必要なのは「Apache Maven WAR Plugin を使う設定」と「サーブレットコンパイルするためのライブラリの追加」になります。
■ pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>web-app</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>web-app Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> </dependency> <build> <finalName>web-app</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <packagingExcludes>WEB-INF/lib/javax.servlet-api-3.0.1.jar</packagingExcludes> </configuration> </plugin> </plugins> </build> </project>
アプリケーションの実行の際は、AP サーバ側のライブラリを使うことになるので、コンパイルするために追加したサーブレット API は packagingExcludes で war ファイルから除外してます ( これはなんとなく他の方法がありそうな気がする・・・ )。
※ packagingExcludes は以下のドキュメントに情報があります。
・Apache Maven WAR Plugin – Including and Excluding Files From the WAR
< http://maven.apache.org/plugins/maven-war-plugin/examples/including-excluding-files-from-war.html >
4. war ファイルにパッケージングする
「mvn package」、もしくは、「mvn compile war:war」( お好きな方で ) で war ファイルにパッケージングします。
成功すると target ディレクトリ直下に web-app.war というファイルができているはずです。
あとは、適当な AP サーバにデプロイして、HelloServlet にアクセスで「Hello Servlet !!」と表示されれば、ひとまず成功です ( 一応 Tomcat 7.0.52 で動作確認済みです )。
以上になります。