#navi_header|Java|
以前、 [[1071]] でtomcat-maven-pluginを使ってEclipse上からTomcatを起動してサクサク開発環境を試してみました。
今回は純粋にdeployに絞り、様々なJavaEEサーバに対応しているcodehausのcargoを試してみます。
環境:
Win7 32bit
JDK6
Maven 3.0.4
Tomcat 6.0.35
conf/tomcat-users.xml:
※tomcat-users.xmlで一般的に良く使われるmanager-gui roleは"/manager/html"のブラウザ画面用のroleです。今回紹介するtomcat-maven-pluginおよびcargoは両方共テキストベースのmanager機能を使うため、manager-scriptのroleでユーザを用意しておく必要があります。
#more||
* tomcat-maven-pluginでのdeploy
[[1071]] で作成したサンプルコードを流用します。codehausのsnapshotリポジトリ情報を追加したpom.xmlに、以下のconfigurationを追加します。
...
org.codehaus.mojo
tomcat-maven-plugin
1.2-SNAPSHOT
http://localhost:8080/manager
tomcat
tomcat
true
/foo
...
Let's deploy!!
mvn tomcat:deploy
""については古い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"を使えば、""がtrueがデフォルトになりますので""の指定は不要になります。
多分deployするまえにちゃんと行儀よくundeployしてあげればfalseのままでも大丈夫だと思います。
また今回はアプリのpom.xmlの方にTomcatのmanagerのusernameとpasswordを入れてますが、外出しにするのであればセオリー通りにsettings.xmlに
tomcat-6.0.35-localhost
tomcat
tomcat
のように書いておき、アプリのpom.xmlでは
http://localhost:8080/manager/html
tomcat-6.0.35-localhost
/foo
としておけばOKです。
なお、あまり無いと思いますが"/"にdeployしたい場合は
/
でOKです。
参考:
- Tomcat Maven Plugin - Usage
-- http://mojo.codehaus.org/tomcat-maven-plugin/usage.html
- Tomcat Maven Plugin - tomcat:deploy
-- http://mojo.codehaus.org/tomcat-maven-plugin/deploy-mojo.html
* codehausのcargoを使ったdeployメモ
codehausのcargoは、様々なJavaEEサーバに対応したdeployを実現してくれるMavenプラグインです。
Jetty, Tomcat, Glassfish, JBoss WebLogicなどオープンソースから商用まで対応しています。
今回はcargoを使ったリモートdeployを試してみます。
- Cargo - Home
-- http://cargo.codehaus.org/
サンプルコードですが、cargo側で「リモートサーバへのdeploy用詰め合わせarchetype」を提供してくれていますので、素直にそれを使ってみます。
#pre||>
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:
- Cargo - Maven2 Archetypes
-- http://cargo.codehaus.org/Maven2+Archetypes
pom.xmlをみてみると、Jetty/Tomcat/JBossなど向けに予めひと通りのprofileが設定済みです。mvn実行時に"-P"でprofileを指定すればよいだけになってます。
カスタマイズが必要な箇所はホスト名・ポート番号・deploy用のusername,passwordを設定しているpropertyだけです。今回はlocalhost:8080でTomcat6.0.35を起動済みですので、あとはusernameとpasswordを以下のように修正します。
...
8080
localhost
tomcat
tomcat
Contextについては既に以下のように"${project.artifactId}"に設定済みでした。
org.codehaus.cargo
cargo-maven2-plugin
1.2.2
remote
runtime
${hostname}
${servlet.port}
${username}
${password}
${project.groupId}
${project.artifactId}
war
${project.artifactId}
では、(他の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
なお、あまり無いと思いますが"/"以下に配備したい場合はのでに"/"を指定します。
/
参考:
- Cargo - Deploying to a running container
-- http://cargo.codehaus.org/Deploying+to+a+running+container
- Cargo - Maven2 Plugin Getting Started
-- http://cargo.codehaus.org/Maven2+Plugin+Getting+Started
- Cargo - Tomcat 6.x
-- http://cargo.codehaus.org/Tomcat+6.x
----
使い分けですが、warファイルをdeployするだけであれば対応コンテナの多さからcargoの圧勝です。ただしcargoを使ってMaven + Eclipseでシームレスにデバッグ実行やサクサク開発を実現できるかは不明です。それが実現できるのであれば、わざわざsnapshotリポジトリを指定する必要のあるtomcat-maven-pluginではなく、cargoでそのまま開発~deployまでを担当させることが可能となります。今回はそこまで調べきれませんでした・・・。
今のところは開発時のデバッグはtomcat-maven-plugin, Jenkinsなどdeployではcargo、という使い分けでしょうか。将来的にはcargoの一人勝ちになるかもしれません。
#navi_footer|Java|