Tomcat 7 の並列展開を利用する Tomcat 7 展開を Maven に実行させる標準化された方法が見つかりません。
http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Parallel_deployment
これを行うための確実な方法はありますか?たぶん、アプリの 2 つのバージョンを常に有効にしているでしょうか?
Tomcat 7 の並列展開を利用する Tomcat 7 展開を Maven に実行させる標準化された方法が見つかりません。
http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Parallel_deployment
これを行うための確実な方法はありますか?たぶん、アプリの 2 つのバージョンを常に有効にしているでしょうか?
このユースケースにはtomcat7-maven-pluginを使用できます。
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/WebappName##${maven.build.timestamp}</path>
<url>http://localhost:8080/manager/text</url>
<username>tomcat</username>
<password>tomcat</password>
<update>true</update>
</configuration>
</plugin>
ご覧のとおりpath
、この例のビルド タイムスタンプに基づいて、要素でバージョンが指定されています。
もちろん、すべての古いバージョンを実行し続けたくない場合undeployOldVersions="true"
は、server.xml要素で使用する必要があります。<Host>
これは、Tomcat 7 の並列展開機能で使用する適切な名前の .war を Maven に作成させるにはどうすればよいですか?という質問で得ていたものです。.
あなたの質問は本当にその要点です。以下は私がしたことです。
まず、Maven に正しい名前の .war ファイルを生成させます。Maven のタイムスタンプ プラグインを使用しました。
...
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>${war.version}</version>
<configuration>
<warName>${war.name}</warName>
</configuration>
</plugin>
...
タイムスタンプをバージョンとして使用すると、Tomcat 7 が最新バージョンを決定するために使用する規則に従って、.war ファイルが正しく命名されることが保証されます。
Tomcat 7 Maven プラグインをこれで動作させるための情報が見つかりませんでした。Tomcat IRC と Maven IRC で質問されました。たぶんそれは可能ですが、私はそれを機能させることができませんでした。
私がしたことはこれでした:
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>install</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>${group.id}</groupId>
<artifactId>${artifact.id}</artifactId>
<version>${version}</version>
<type>war</type>
<overWrite>true</overWrite>
<outputDirectory>${autodeploy.directory}</outputDirectory>
<destFileName>${war.name}.war</destFileName>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
...
これは、ある場所から別の場所にファイルをコピーするだけです。この場合、Tomcat の autodeploy ディレクトリにビルドした .war です。
デプロイに Jenkins を使用する場合は、ビルド後のアクションとしてコピーを設定できます。(EAR/WAR ファイル名には target/appname*.war を使用します。)
完全を期すために、参照されるさまざまなプロパティを次に示します。
<properties>
<artifact.id>myApp</artifact.id>
<version>1.0</version>
<group.id>com.example.${artifact.id}</group.id>
<autodeploy.directory xml:space="preserve">C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps</autodeploy.directory>
<war.name>${artifact.id}##${maven.build.timestamp}</war.name>
...
xml:space="preserve"
(ディレクトリにスペースがある場合に Windows を満足させることに注意してください。)
Tomcat 7 はデフォルトで自動デプロイされますが、古いバージョンは削除されません。何かを台無しにして最新バージョンをアンデプロイする必要がある場合に備えて、すべての古いバージョンを利用できるため、それがあなたの望むものかもしれません。
しかし、いわばペンで書きたい場合は、Tomcat 7 のインストール ディレクトリから conf/server.xml を見つけてください。次<Host>
のようにします。
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" undeployOldVersions="true">
undeployOldVersions="true"
魔法です。
それは本当にそれです。これで、maven clean install
適切な名前の war が作成され、Tomcat の autodeploy ディレクトリにスローされ、動作するはずです。
-コリン
ここでも同じなので、Maven で正確にそれを行うスクリプトを作成しました。 http://tynamo.org/Zero+downtime+deployment+to+Tomcat+7+with+Mavenを参照してください。また、Tomcat 7.0.31 には undeployOldVersions があります ( https://issues.apache.org/bugzilla/show_bug.cgi?id=52777を参照)。
Mavenを介してこれを直接行うのは難しいかもしれません。パッケージ化が発生したときにMavenにバージョン番号をWARファイルに適用させてから、それをデプロイしてみることができます。
古いバージョンに関しては、「undeployOldVersions」プロパティを使用すると、Tomcatは使用されなくなったときに古いバージョンを削除できます。
MeerCat のようなより優れた Tomcat マネージャーを使用してみてください: http://www.meercatmanager.com
Maven は使用しませんが、同じアプリケーションを複数の Tomcat サーバー インスタンスにデプロイし、それらのデプロイを簡単に管理できます。見てみな !