home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Java/Maven3/Tomcatへのdeployメモ(tomcat-maven-plugin, cargo.codehaus.org)

Java/Maven3/Tomcatへのdeployメモ(tomcat-maven-plugin, cargo.codehaus.org)

Java / Maven3 / Tomcatへのdeployメモ(tomcat-maven-plugin, cargo.codehaus.org)
id: 1090 所有者: msakamoto-sf    作成日: 2012-06-10 21:25:19
カテゴリ: Java Maven 

以前、 Java/Maven3/Eclipse上でサクサクWeb開発 (例:tomcat-maven-plugin) でtomcat-maven-pluginを使ってEclipse上からTomcatを起動してサクサク開発環境を試してみました。
今回は純粋にdeployに絞り、様々なJavaEEサーバに対応しているcodehausのcargoを試してみます。

環境:

Win7 32bit
JDK6
Maven 3.0.4
Tomcat 6.0.35
 conf/tomcat-users.xml:
  <role rolename="manager-script"/>
  <user username="tomcat" password="tomcat" roles="manager-script"/>

※tomcat-users.xmlで一般的に良く使われるmanager-gui roleは"/manager/html"のブラウザ画面用のroleです。今回紹介するtomcat-maven-pluginおよびcargoは両方共テキストベースのmanager機能を使うため、manager-scriptのroleでユーザを用意しておく必要があります。

tomcat-maven-pluginでのdeploy

Java/Maven3/Eclipse上でサクサクWeb開発 (例:tomcat-maven-plugin) で作成したサンプルコードを流用します。codehausのsnapshotリポジトリ情報を追加したpom.xmlに、以下のconfigurationを追加します。

 <build>
   <plugins>
     ...
     <plugin>
       <groupId>org.codehaus.mojo</groupId>
       <artifactId>tomcat-maven-plugin</artifactId>
       <version>1.2-SNAPSHOT</version>
       <configuration>
         <url>http://localhost:8080/manager</url>
         <username>tomcat</username>
         <password>tomcat</password>
         <update>true</update>
         <path>/foo</path>
       </configuration>
     </plugin>
     ...
   </plugins>
 </build>

Let's deploy!!

mvn tomcat:deploy

"<update>"については古いwarを一旦配備解除(undeploy)してからdeployして欲しいのでtrueにしてます。
これを省略したりデフォルトのfalseのままにしておくと、2度目のdeployで

[ERROR] Failed to execute goal org.codehaus.mojo:tomcat-maven-plugin:1.2-SNAPSHOT:deploy (default-cli)
on project tomcat-maven-plugin-test: Cannot invoke Tomcat manager: FAIL
- アプリケーションは、既にパス / に存在します -> [Help 1]

とERRORになってしまいます。
"tomcat:redeploy"を使えば、"<update>"がtrueがデフォルトになりますので"<update>"の指定は不要になります。
多分deployするまえにちゃんと行儀よくundeployしてあげればfalseのままでも大丈夫だと思います。

また今回はアプリのpom.xmlの方にTomcatのmanagerのusernameとpasswordを入れてますが、外出しにするのであればセオリー通りにsettings.xmlに

 <servers>
   <server>
     <id>tomcat-6.0.35-localhost</id>
     <username>tomcat</username>
     <password>tomcat</password>
   </server>
 </servers>

のように書いておき、アプリのpom.xmlでは

       <configuration>
         <url>http://localhost:8080/manager/html</url>
         <server>tomcat-6.0.35-localhost</server>
         <path>/foo</path>
       </configuration>

としておけばOKです。

なお、あまり無いと思いますが"/"にdeployしたい場合は

<path>/</path>

でOKです。

参考:

codehausのcargoを使ったdeployメモ

codehausのcargoは、様々なJavaEEサーバに対応したdeployを実現してくれるMavenプラグインです。
Jetty, Tomcat, Glassfish, JBoss WebLogicなどオープンソースから商用まで対応しています。
今回はcargoを使ったリモートdeployを試してみます。

サンプルコードですが、cargo側で「リモートサーバへのdeploy用詰め合わせarchetype」を提供してくれていますので、素直にそれを使ってみます。

mvn archetype:generate -B \
-DarchetypeGroupId=org.codehaus.cargo \
-DarchetypeArtifactId=cargo-archetype-remote-deployment \
-DarchetypeVersion=1.2.2 \
-DgroupId=cargo-deploy-test \
-DartifactId=cargo-deploy-test \
-Dversion=1.0-SNAPSHOT \
-Dpackage=test.cargo.deploy

cargo提供のarchetype:

pom.xmlをみてみると、Jetty/Tomcat/JBossなど向けに予めひと通りのprofileが設定済みです。mvn実行時に"-P"でprofileを指定すればよいだけになってます。
カスタマイズが必要な箇所はホスト名・ポート番号・deploy用のusername,passwordを設定しているpropertyだけです。今回はlocalhost:8080でTomcat6.0.35を起動済みですので、あとはusernameとpasswordを以下のように修正します。

 <properties>
   ...
   <servlet.port>8080</servlet.port>
   <hostname>localhost</hostname>
   <username>tomcat</username>
   <password>tomcat</password>
 </properties>

Contextについては既に以下のように"${project.artifactId}"に設定済みでした。

 <build>
   <pluginManagement>
     <plugins>
       <plugin>
         <groupId>org.codehaus.cargo</groupId>
         <artifactId>cargo-maven2-plugin</artifactId>
         <version>1.2.2</version>
         <configuration>
           <container>
             <type>remote</type>
           </container>
           <configuration>
             <type>runtime</type>
             <properties>
               <cargo.hostname>${hostname}</cargo.hostname>
               <cargo.servlet.port>${servlet.port}</cargo.servlet.port>
               <cargo.remote.username>${username}</cargo.remote.username>
               <cargo.remote.password>${password}</cargo.remote.password>
             </properties>
           </configuration>
           <deployer>
             <deployables>
               <deployable>
                 <groupId>${project.groupId}</groupId>
                 <artifactId>${project.artifactId}</artifactId>
                 <type>war</type>
                 <properties>
                   <context>${project.artifactId}</context>
                 </properties>

では、(他のprofileが余計であればさっくり削除して)deployしてみましょう。なおarchetype提供のpom.xml中の、他のprofileを残している場合は"-P tomcat6x"などでprofileを指定するのを忘れずに。

mvn clean verify

cargo提供の"cargo-archetype-remote-deployment" archetypeでは、上記コマンドで結合テスト前にdeploy、結合テスト(index.jspを叩いてみて200が返されるか確認)実行、結合テスト後にundeployまでをしてくれるように設定済みです。

単純にdeploy/undeploy/redeployするだけであれば以下のgoalを指定します。

mvn cargo:deploy
mvn cargo:undeploy
mvn cargo:redeploy

なお、あまり無いと思いますが"/"以下に配備したい場合は<deployable>の<properties>で<context>に"/"を指定します。

 <properties>
   <context>/</context>
 </properties>

参考:


使い分けですが、warファイルをdeployするだけであれば対応コンテナの多さからcargoの圧勝です。ただしcargoを使ってMaven + Eclipseでシームレスにデバッグ実行やサクサク開発を実現できるかは不明です。それが実現できるのであれば、わざわざsnapshotリポジトリを指定する必要のあるtomcat-maven-pluginではなく、cargoでそのまま開発~deployまでを担当させることが可能となります。今回はそこまで調べきれませんでした・・・。

今のところは開発時のデバッグはtomcat-maven-plugin, Jenkinsなどdeployではcargo、という使い分けでしょうか。将来的にはcargoの一人勝ちになるかもしれません。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2012-06-10 21:31:39
md5:9c9cda0fc9e742ff1bd1ae625b1aa14d
sha1:71431abe448afff3f0cf43cfacc684c4920b959a
コメント
コメントを投稿するにはログインして下さい。