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