Maven で Web アプリ用のプロジェクトを作成してからコーディングを着手するまでにやること

公開日: : 最終更新日:2014/05/06 Maven ,

Java を使った開発プロジェクトでは Maven を使っています。

archetype:create を使ってプロジェクトを新規作成してくれるまではいいのですが、コードを書き始めるまでにディレクトリを作成したり POM を修正とちょっと面倒くさい作業をしますよね。

この面倒くさい作業、何をするか忘れることがあるので手順をまとめてみました。
よかったら参考にしてみてください。

icatch-maven-create_mini

QTTheory via photopin cc

目次

1. 動作環境

まずは動作環境なんですがマシンにインストールされている Java と Maven のバージョンは次の通りです。

1-1. Java

$ java -version
java version "1.7.0_11"
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

1-2. Maven

$ mvn -v
Apache Maven 3.0.4 (r1232337; 2012-01-17 17:44:56+0900)
Maven home: C:\Users\xxx\maven-3.0.4
Java version: 1.7.0_11, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_11\jre
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

2. プロジェクトの作成

次のコマンドを実行して Web アプリのプロジェクトを作成します。

mvn archetype:generate -DgroupId=PACKAGE_NAME -DartifactId=PROJECT_NAME -DarchetypeArtifactId=maven-archetype-webapp

以下をプロジェクトによって置き換えてください。

  • PACKAGE_NAME:アプリのパッケージ名を指定する
  • PROJECT_NAME:アプリのプロジェクト名を指定する

2-1. 不足しているディレクトリの作成

次のディレクトリが不足しているので作成します。

テストを書かないなら src/test ディレクトリは作成しなくて大丈夫です。

  • src/main/java
  • src/test/java
  • src/test/resources
$ cd PROJECT_HOME
$ mkdir src/main/java
$ mkdir -p src/test/java
$ mkdir -p src/test/resources

3. POM の修正

version とか url は必要があれば修正すればいいと思います。

それ以外についての設定をメモしておきます。

3-1. WAR にバージョン番号を付加しないようにする

デフォルトの設定だと package コマンドで生成される WAR にバージョン番号が付加されてしまいます。

WAR のファイル名は pom.xml に finalName タグが設定されていると、その値が反映されます。
これを利用してバージョン番号の付加を回避します。

例えば pom.xml に次のように設定しておくと、、、

<build>
  <finalName>hoge</finalName>
</build>

作成される WAR のファイル名は hoge.war となります。

3-2. web.xml がなくても “mvn package” に成功させる

Tomcat7 から web.xml が必須じゃなくなりました。

ですが、デフォルトの状態では “mvn package” コマンドを実行するとコケてしまうので、 pom.xml に設定を追加します。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml> <!-- ← これが必要 -->
            </configuration>
        </plugin>
        :
        :
    </plugins>
</build>

3-3. Java のバージョンを指定する

環境によって動かない!とか非常に面倒くさいので、pom.xml に Java のコンパイラバージョンを設定しておきます。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        :
        :
    </plugins>
</build>

3-4. ソースコードのエンコーディングを UTF-8 に設定する

特別な事情がない限り、ソースコードのエンコーディングは UTF-8 でこれまで開発してきました。

Maven でプロジェクトを作成すると、デフォルトが UTF-8 なので何もしなくていいのですが、変更が必要になった時のためにメモ。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

3-5. ソースコード類を置くディレクトリの設定

ソースコードや設定ファイルを置くディレクトリをクラスパスに通す設定です。

以下の設定はデフォルトでこのようになっています。なので、pom.xml に書く必要はないのですが、変更が必要になった時のためにメモ。

<build>
    :
    :
    <sourceDirectory>src/main/java</sourceDirectory>
    <outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
    <testOutputDirectory>target/test-classes</testOutputDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <testResources>
        <testResource>
            <directory>src/test/resources</directory>
        </testResource>
    </testResources>
</build>

4. dependency の追加

以下は、dependency に関する設定です。

4-1. Servlet API 3.0

Servlet API 3.0 を利用する場合は次の dependency を追加します。

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

4-2. JSP/JSTL 1.2

JSP/JSTL 1.2 を利用する場合は次の dependency を追加します。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jstl-impl</artifactId>
    <version>1.2</version>
    <exclusions>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

4-3. JUnit4

常に最新バージョンの JUnit4 を使いたい場合は次の dependency を追加します。

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>[4,)</version>
    <scope>test</scope>
</dependency>

ただし、これだと mvn を実行すると毎回探しに行くので、バージョンは固定したほうがいいかもしれません。

最新バージョンは 4.11 なので次のようになります。

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>

4-4. hamcrest-library

テストを簡潔に書けるライブラリです。

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-library</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>

オブジェクトのプロパティが正しいかを確認するときによく使っています。
具体的には次の記事を参考にしてみてください。

4-5. mockito

単体テストでモックを使いたい場合は mockito を使っています。
これも合わせて設定しておきます。

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.9.5</version>
    <scope>test</scope>
</dependency>

5. web.xml の修正

ServletAPI 3.0 を使う場合、web-app タグを次のものに置き換えます。

<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">

また、ファイルの1行目も次のものに置き換えます。

<?xml version="1.0" encoding="UTF-8"?>

6. Eclipse にインポートする

IDE には Eclipse を使っています。

Maven で作成したプロジェクトを Eclipse に取り込む前に次のコマンドを実行して、Eclipse へのインポートに必要なファイルを生成します。

$ mvn eclipse:eclipse -DdownloadSources=true

6-1. Eclipse からの入力エンコーディングを UTF-8 に設定する

Eclipse にプロジェクトをインポートした後の話。

デフォルトの文字列エンコーディングが UTF-8 になっていないので、UTF-8 にする。

  1. プロジェクトを右クリック → Properties を選択 → ダイアログが表示される
  2. 左側のメニューから Resource をクリック
  3. “Text file encoding” 枠で UTF-8 を選択

7. まとめ

これでやっと開発前の準備が終了です。
いろいろあって面倒くさいですが、ボクが知らないだけでもっと自動化できると思います。

8. その他の Maven に関する記事

その他の Maven に関する記事は次の通りです。
気になる記事があったらぜひチェックしてみてください!

Googleアドセンス用(PC)

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

関連記事

no image

Exec Maven Plugin で maven コマンドでアプリを起動する

packaging タグに "jar" を指定した Maven プロジェクトをコマンドラインから起動

記事を読む

icatch-maven

spring framework を使ったデスクトップアプリ(standalone app)で maven-jar-plugin を使って作成した JAR を java コマンドで実行する

spring framework を使ったデスクトップアプリ(standalone app)で co

記事を読む

icatch-maven_5928412787

Maven で作成したプロジェクトのソースコードを JAR にする方法

Maven で作成したプロジェクトのソースコードを JAR にまとめて公開する方法を調べてみました。

記事を読む

Googleアドセンス用(PC)

Comment

  1. Sonohen より:

    Maven初心者です。Mavenでビルドしていてweb.xmlを要求されて困っていたのですが(Webアプリ専用でもないでしょう?)、こちらにヒントがあり助かりました。ありがとうございました。

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


× 一 = 3

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Googleアドセンス用(PC)

icatch-jersey_multi_pathparams
Jerseyの@PathParamはスラッシュの間に複数指定できる

http://hoge-api/user/{id}.{format}

icatch-vagrant_box_customize
VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を

icatch-2015-006-1
バリデーションチェックにJava8のOptionalを使ってスマートに書く(自分比)

Web アプリのバリデーションチェックにアノテーションを使うことが増え

icatch-2015-005-1
ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。

icatch-2015-004-1
Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定

タイトルの通りだが、Vagrant を使って起動した CentOS に

→もっと見る

PAGE TOP ↑