2011-06-24 10 views
10

Mam projekt maven, w którym chcę użyć Cargo-Maven-Plugin (1.1.1), aby uruchomić i zatrzymać serwer tomcat, aby uruchomić testy integracji.Maven Cargo nie zatrzymuje pojemnika

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

Uruchamianie serwera działa prawidłowo, ale zatrzymywania zawsze niepowodzeniem.

[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 

ja testowałem to z kilku projektów, dodać co najmniej z pustego projektu (zważywszy wyjątkiem w web.xml), ale zawsze ten sam rezultat. Testowałem z tomcat6, tomcat7, a nawet z osadzonymi Jetty6 i 7, ale zawsze ten sam wyjątek. Dodałem opóźnienie 5 sekund między początkiem i końcem (przez test integracji), ale to nie pomaga.

Kiedy patrzę na pliki dzienników i uruchomione procesy, wydaje się, że kocur jest zatrzymany, ale ładunek go nie zauważył.

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 

Więc moje pytanie brzmi:

  • Czy muszę coś złego?
  • Czy to błąd?
  • Czy istnieje jakieś stanowisko pracy?
+0

napotkał niedawno, niemal dokładnie taką samą konfigurację, dokładnie ten sam problem. Chciałbym usłyszeć rozwiązanie - z innych powodów musieliśmy przełamać fazy kompilacji w wielu rozproszonych kompilacjach - więc przenieśliśmy działania uruchamiania/zatrzymania tomcat na Ant, które działały (wszystkie zorkiestrowane przez Hudson/Jenkins). Ten, który znaleźliśmy, to jak kompilacja spawnuje tomcat JVM i jak serwer/build/CI będzie zabijał procesy potomne, jeśli nie przetwarzałeś flagi odrodzenia. Być może gdzieś brakuje jakiejś opcji Maven? –

+0

@Al Baker: Otworzyłem błąd w Cargo Bug Tracker (http://jira.codehaus.org/browse/CARGO-1005). Ale wciąż nie znaleźliśmy przyczyny problemu. Ponieważ działał z innymi systemami. Może to być pomocne Dodając komentarz do opisu konfiguracji (i może sprawdzić, czy przykładowy projekt, który mam dołączony do błędu, działa dla Ciebie, czy nie). – Ralph

+0

To było prawie dokładnie to samo, ale bez instalatora adresów URL - byliśmy na odłączonej sieci –

Odpowiedz

5

Możliwe, że coś innego nasłuchuje na porcie 8080 na komputerze. To sprawiłoby, że ładunek pomyślałby, że kocur się nie zatrzyma. Możesz zmienić port AJP dla kocurka poprzez konfigurację ładunku na coś mniej powszechnego. Więcej informacji można znaleźć na tym blogu: http://kreskasnotes.blogspot.com/2011/07/problem-with-shutting-down-tomcat-via.html

+0

To była bardzo dobra wskazówka. Nie wiem, co jest nie tak z Port 8080 na moim komputerze, ponieważ Putty i Netstat nie znaleźli niczego na Port 8080. Ale po przejściu na Port 8081 to działa. BTW: ** Nie mogę zmienić portu AJP, ale port serwletu: ' 8081' ** – Ralph

+0

Tak samo dla mnie, to dało mi pomysł szukania osieroconego procesy tomcat. Znaleziono jeden, zabił go, a sprawa zniknęła. – HDave

5

Miałem ten sam problem. Nie mogłem zatrzymać pojemnika z mojego serwera Hudson, podczas gdy poprawnie zatrzymywałem się na mojej lokalnej maszynie z tym samym pom.xml i tymi samymi celami i opcjami Mavena.

Problem polegał na tym, że Hudson był na Tomcat, a kontener i Tomcat korzystały z tych samych portów. Zmiana portu servlet z 8080 na 8181, a port AJP z 8009 na 8012 (liczby zostały arbitralnie wybrane) rozwiązał problem, a cel "stop" został pomyślnie wykonany.

Musiałem zmienić 2 porty, ponieważ konflikt był między 2 Tomcatami, jeśli konflikt jest pomiędzy Tomcat i czymś innym, wystarczy jedna z 2 zmian.

2 linii użyłem zmienić porty to:

<configuration> 
    ... 
    <properties> 
     ... 
     <cargo.servlet.port>8181</cargo.servlet.port> 
     <cargo.tomcat.ajp.port>8012</cargo.tomcat.ajp.port> 
     ... 
    </properties> 
    ... 
</configuration>