2011-06-24 21 views
10

統合テストを実行するためにCargo-Maven-Plugin(1.1.1)を使用してTomcatサーバーを起動および停止するmavenプロジェクトがあります。Maven Cargoはコンテナを停止しません

<plugin> 
<groupId>org.codehaus.cargo</groupId> 
<artifactId>cargo-maven2-plugin</artifactId> 
<version>1.1.1</version> 
<executions> 
    <execution> 
     <id>start-container</id> 
     <phase>pre-integration-test</phase> 
     <goals> 
      <goal>start</goal> 
     </goals> 
    </execution> 
    <execution> 
     <id>stop-container</id> 
     <phase>post-integration-test</phase> 
     <goals> 
      <goal>stop</goal> 
     </goals> 
    </execution> 
</executions> 
<configuration>     
    <container>     
    <type>installed</type> 
    <containerId>tomcat6x</containerId> 
    <zipUrlInstaller> 
     <url>http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.32/bin/apache-tomcat-6.0.32.zip</url> 
    </zipUrlInstaller> 
</container>  
</configuration> 
</plugin> 

サーバーの起動は問題なく動作しますが、は常に停止します。

[ERROR] Failed to execute goal org.codehaus.cargo:cargo-maven2-plugin:1.1.1:stop (stop-container) on project test: Execution stop-container of goal org.codehaus.cargo:cargo-maven2-plugin:1.1.1:stop failed: Failed to stop the Tomcat 6.x container. Server port 8080 did not shutdown within the timeout period [120000] -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.cargo:cargo-maven2-plugin:1.1.1:stop (stop-container) on project test: Execution stop-container of goal org.codehaus.cargo:cargo-maven2-plugin:1.1.1:stop failed: Failed to stop the Tomcat 6.x container. 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:225) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
     at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319) 
     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
     at org.apache.maven.cli.MavenCli.execute(MavenCli.java:534) 
     at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
     at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
     at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution stop-container of goal org.codehaus.cargo:cargo-maven2-plugin:1.1.1:stop failed: Failed to stop the Tomcat 6.x container. 
     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:116) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
     ... 19 more 
Caused by: org.codehaus.cargo.container.ContainerException: Failed to stop the Tomcat 6.x container. 
     at org.codehaus.cargo.container.spi.AbstractLocalContainer.stop(AbstractLocalContainer.java:220) 
     at org.codehaus.cargo.maven2.ContainerStopMojo.doExecute(ContainerStopMojo.java:49) 
     at org.codehaus.cargo.maven2.AbstractCargoMojo.execute(AbstractCargoMojo.java:278) 
     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:107) 
     ... 20 more 
Caused by: org.codehaus.cargo.container.ContainerException: Server port 8080 did not shutdown within the timeout period [120000] 
     at org.codehaus.cargo.container.spi.AbstractLocalContainer.waitForPortShutdown(AbstractLocalContainer.java:363) 
     at org.codehaus.cargo.container.spi.AbstractLocalContainer.waitForPortShutdown(AbstractLocalContainer.java:297) 
     at org.codehaus.cargo.container.tomcat.internal.AbstractCatalinaInstalledLocalContainer.waitForCompletion(AbstractCatalinaInstalledLocalContainer.java:190) 
     at org.codehaus.cargo.container.spi.AbstractLocalContainer.stop(AbstractLocalContainer.java:214) 
     ... 23 more 

私は、少なくとも空のプロジェクト(web.xmlファイル以外に注目)が、常に同じ結果を追加し、いくつかのプロジェクトでそれをテストしています。私はtomcat6、tomcat7、そして埋め込まれたJetty6と7でテストしましたが、いつも同じ例外があります。私は開始と停止の間に(統合テストを介して)5秒の遅延を追加しましたが、これは役に立ちません。

ログファイルと実行中のプロセスを見ると、Tomcatが停止しているように見えますが、貨物はそれに気付かなかったようです。

24.06.2011 17:38:07 org.apache.catalina.startup.Catalina start 
INFO: Server startup in 694 ms 
24.06.2011 17:38:07 org.apache.coyote.http11.Http11Protocol pause 
INFO: Pausing Coyote HTTP/1.1 on http-8080 
24.06.2011 17:38:08 org.apache.catalina.core.StandardService stop 
INFO: Stopping service Catalina 
24.06.2011 17:38:08 org.apache.coyote.http11.Http11Protocol destroy 
INFO: Stopping Coyote HTTP/1.1 on http-8080 

だから私の質問は次のとおりです。

  • は私に何かを間違っていますか?
  • バグですか?
  • ワーキングルームはありますか?
+0

。私は解決策を聞くことに興味があります - 私たちは、他の理由から、複数の分散ビルド間でビルドのフェーズを分割する必要があったので、Tomcatの起動/停止アクションをAntに移しました。ハドソン/ジェンキンス経由)。私たちが掘り起こしたのは、buildがどのようにTomcat JVMを生成するのか、そしてあなたがspawnフラグを処理しなかった場合、ビルド/ CIサーバが子プロセスをどのようにしてkillするのかです。 –

+0

@Al Baker:私はCargo Bug Tracker(http://jira.codehaus.org/browse/CARGO-1005)でバグをオープンしました。しかし、私たちはまだ問題の原因を見いだせませんでした。それは他のシステムと連携していたからです。私があなたの設定を記述するためのコメントを追加するのに役立つかもしれません(私がバグに添付したサンプルプロジェクトがあなたのために働くかどうかを確認するかもしれません)。 – Ralph

+0

それはほぼ同じでしたが、URLインストーラなしでは、私たちは切断されたネットワーク上にいた –

答えて

5

マシン上のポート8080でリッスンしている可能性があります。これは、貨物船が風が止まらないと思うようにする。あなたは、貨物の設定を介してtomcatのAJPポートをあまり一般的でないものに変更することができます。詳細については、このブログの記事をご覧ください。 http://kreskasnotes.blogspot.com/2011/07/problem-with-shutting-down-tomcat-via.html

+0

これは非常に良いヒントでした。パテとNetstatはポート8080で何も見つからなかったので私のマシン上のポート8080に何が問題なのか分かりませんが、ポート8081に変更すると動作します。 BTW:**私はAJPポートではなくサーブレットポートを変更してはいけません: ' 8081' ** – Ralph

+0

同様に、これは私には孤児tomcatプロセス。 1つを見つけてそれを殺し、問題は解決しました。 – HDave

5

私は同じ問題がありました。同じpom.xmlと同じMavenの目標とオプションを使用してローカルマシン上で正しく停止していた間に、Hudsonサーバーからコンテナを停止できませんでした。

問題は、ハドソンがTomcatにあって、コンテナとTomcatが同じポートを使用していたことでした。サーブレットポートを8080から8181に変更し、AJPポートを8009から8012に変更すると(数字が任意に選択されていた)、問題が解決され、「停止」目標が正常に実行されました。

2つのTomcat間で競合が発生したため、2つのポートを変更する必要がありました。もしTomcatと他のものとの間に競合がある場合は、2つの変更のうち1つが必要になる可能性があります。私は、ポートを変更するために使用さ

2行は、次のとおりです。この最近、ほとんどまったく同じセットアップ、まったく同じ問題が発生しました

<configuration> 
    ... 
    <properties> 
     ... 
     <cargo.servlet.port>8181</cargo.servlet.port> 
     <cargo.tomcat.ajp.port>8012</cargo.tomcat.ajp.port> 
     ... 
    </properties> 
    ... 
</configuration> 
関連する問題