mavenを使ってwarファイルを作成

普段はインフラエンジニアとして働いているが、アプリのビルドについて勉強する機会があった。

今回はそれについて備忘録としてまとめておく。

mavenについて右も左も分からない状態から、mavenでwarを作る必要がありここまでできたのは、もはやこの方の記事のおかげである。感謝しかない。

そして、検索すると結構出てくるのが、Eclipseでボタンポチーでビルドするパターンだが、最終的にCI/CDツールで自動化したいのでコマンドでビルドするために何が必要なのかを把握したく、先ほどの記事に辿り着いた。

この記事は、それをただリライトしているだけのあまり芸の無いものになっているかもしれない。

スポンサーリンク

mavenとは

mavenこと、Apache Mavenは、Javaのプロジェクト管理ツールであるとWikipedia様が言っている。

そして、管理するためにpom.xmlというXML形式のファイルで依存関係などを記載してビルド時にその指示書をもとにビルドしてくれるやつらしい。

また、Mavenは、Apache Antというビルドツールの後継のツールらしい。

スポンサーリンク

やり方

本題に入ります。

1. プロジェクトを作成する

ここは意味も分からないがとりあえずこのコマンドを打つ。-D で始まる部分がオプションとして記載していく。この部分がないと、作成時に対話式で入力することになる。

mvn archetype:generate -DgroupId=com.example -DartifactId=web-app -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
2. プロジェクトが作成される

こんな感じのフォルダ構成になっていました。

$ tree -a
.
└── web-app
    ├── pom.xml
    └── src
        └── main
            ├── resources
            └── webapp
                ├── WEB-INF
                │   └── web.xml
                └── index.jsp
3. HelloServlet.javaの作成

まずは、ディレクトリが無いのでそれを作成する。そして、ファイル作成。今回は、Hello Servlet !! と出ればいいんだな。とりあえず、写経のごとくコピペ。(後にこの文字は出てないことに気づく)

mkdir -p src/main/java/com/example
vim HelloServlet.java
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>");
  }
}
4. web.xmlの編集

こちらは以下の場所にあるので、そのまま編集

vim web-app/src/main/webapp/WEB-INF/web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <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>
5. pom.xmlの編集

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>

  <properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <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>
6. mavenでビルド

clean(今まであったビルド語に生成されたファイルを削除)しつつ、installコマンドでビルド

mvn clean install

ビルドが成功したら、以下のような感じになる

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  7.293 s
[INFO] Finished at: 2022-04-29T18:13:30+09:00
[INFO] ------------------------------------------------------------------------
7. warファイルを確認

直下に target というディレクトリが作られているのでその配下にwarファイルが生成されていたらOK

8. tomcatにデプロイしてみる

warファイルを実際にtomcatのwebapp配下にコピーしてみてリスタートし、localhost:8080/web-app にアクセスしてみると・・・「Hello Servlet」じゃないけどできた!

つまづいた部分

ビルド時に [ERROR] Source option 5 is no longer supported. Use 6 or later. とエラーが出た

これは、mavenのコンパイラのバージョンが古いらしい。こちらを参考にpom.xmlに追加

最後に

いかがでしたでしょうか?

とある記事のリライトなのであまり面白く無いですが、無事warファイルを作ることができました。

Hello Servletと表示される予定だったけどHello Worldなのはちょっと調査していきますが、やりたいことは達成しました。

所々、意味を理解せずに記述している部分とかもあるかと思いますが、そこは暖かい目で見ていただけると助かります。

以上

追記

localhost:8080/web-app/HelloServelet で、Hello Servlet !! が表示されました。

参考記事

コメント

タイトルとURLをコピーしました