2013年8月1日木曜日

eclipseでmavenプロジェクトとTomcat7を連携する方法(デプロイ)

■概要
mavenプロジェクトをeclipse上で作成しそのままtomcat上にデプロイする方法を紹介します

■環境
Windows7(64bit)
maven3.0.4(eclipse組み込み版)
eclipse3.7(m2eclipse, mongrel)
Java1.7.0_17
Tomcat7.0.42

■プロジェクト作成
Mavenプロジェクトを作成します
プロジェクトエクスプローラから新規→その他→Mavenプロジェクトを選択します
eclipseでMavenプロジェクトを作成するためには「m2eclipse」プラグインをインストールする必要がありますのでインストールしていない場合はEclipseマーケットプレイスからインストールしてください


作成時のポイントとしてはアーティファクトId「maven-archetype-webapp」を選択してください


グループIDにはプロジェクトを作成する組織名をアーティファクトIDには実際に作成される成果物名を記載します
またそのままパッケージ名にも使われるので例えば
グループID「com.kakakikikeke.sample」アーティファクトID「maven.tomcat」とするとパッケージ名は「com.kakakikikeke.sample.maven.tomcat」となります
それ以外は次へを押していけば大丈夫です
これでプロジェクトの作成は完了です

■プロジェクトの設定
プロジェクトを右クリックしビルドパスの構成からJavaのバージョンを変更します
デフォルトではJ2EEの1.5になっているためJava1.7.0_17に変更します
Javaは自分でインストールする必要がありますのでインストール後、eclipseにも追加してください


また右クリック→プロパティ→プロジェクト・ファセットでのJavaのバージョンを1.7に変更します

■pom.xml編集
以下をprojectタブの直下に記載します
pom.xmlはプロジェクトの直下に作成されています
<build>
    <finalName>test</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.1</version>
            <configuration>
                <server>localtomcat</server>
                <port>8080</port>
                <path>/test</path>
            </configuration>
        </plugin>
    </plugins>
</build>
projectタグの直下(dependenciesタグと同階層)の箇所に記載します
とりあえずここは記載するだけでOKです

■tomcat-users.xml編集
記載したらtomcatを起動します
tomcatの起動はeclipseからでなくても問題ありません
(念のため起動しているかどうかhttp://localhost:8080/などにアクセスしてみてください)

また今回は/manager/textというパスにアクセスできる必要があります
このパスはmanager-scriptというロールに該当するユーザが存在する必要があります(manager-guiではありません)
conf/tomcat-users.xmlに以下を記載してください
<tomcat-users>
<user name="tomcat" password="s3cret" roles="manager-script" />

/managerにもアクセスさせたい場合には以下のようにします
<user name="tomcat" password="s3cret" roles="manager-gui,manager-script" />

インストール時にも設定することができますが、忘れた場合は直接conf/tomcat-users.xmlを編集してしまいましょう
編集してtomcatを再起動してください
http://localhost:8080/manager/text
にアクセスして設定したパスワードでログインできるか確認します

■settings.xmlの編集
/manager/text用のユーザ名とパスワードをmavenに認識させるためにmavenの設定ファイルであるsettings.xmlに記載します
ファイルは~/.m2/settings.xmlにあると思います
なければ作成して以下を記載します
※既存のファイルがあればserversタグ以下の情報をコピペしてください
<?xml version="1.0" encoding="UTF-8"?>
<settings>
    <servers>
        <server>
            <id>localtomcat</id>
            <username>tomcat</username>
            <password>s3cret</password>
        </server>
    </servers>
</settings>

■デプロイ
プロジェクトを右クリックし実行→実行の構成からMavenビルド用の起動設定をします
右クリック新規で起動設定を作成し名前を入力します
基底ディレクトーはワークスペースの参照から作成したプロジェクトを参照します
そして、ゴールの欄に以下を記載します
tomcat7:deploy
これがポイントでtomcat:deployでも実行できるのですが、tomcat:deployだと/manager配下にリクエストするためにエラーとなります
おそらくtomcat7から/manager/textにアクセスしないとダメなようになったっぽいので、ちゃんとtomcat7:deployと明示してあげます
あとは特に設定するところはありません(JRE等も選択できますが、デフォルトはワークスペースに設定されているJREが適用になります)
設定が完了したら実行します

以下のようなログが出れば完了です
[INFO] tomcatManager status code:200, ReasonPhrase:OK
[INFO] OK - コンテキストパス /test でアプリケーションを配備しました
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.765s
[INFO] Finished at: Wed Jul 31 15:30:22 JST 2013
[INFO] Final Memory: 13M/221M
[INFO] ------------------------------------------------------------------------
http://localhost:8080/test にアクセスしてデプロイされていることを確認します
(maven-archetype-webapp のデフォルトのままだとHello Worldが表示されるだけだと思います)

というわけで以上となります。
今回苦戦したポイントは
  • Tomcat7用のmaven-tomcat-pluginの記載が必要だった
  • Tomcatが起動していないといけない
  • tomcat7:deployをゴールに設定しないといけない
  • コンソールが文字化けしたのでeclipse.iniに-Dfile.encoding=utf-8を追加した(余談)
でした
まだ、日本語の情報が少ないのも意外とmavenに取っつきにく原因の一つかもしれません

■参考サイト

0 件のコメント:

コメントを投稿