Maven Cargo не останавливает контейнер - PullRequest
10 голосов
/ 24 июня 2011

У меня есть проект maven, в котором я хочу использовать Cargo-Maven-Plugin (1.1.1) для запуска и остановки сервера Tomcat для запуска интеграционных тестов.

<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 секунд между запуском и остановкой (через интеграционный тест), но это не помогает.

Когда я смотрю на файлы журнала и запущенные процессы, кажется, чтокот остановлен, но груз его не заметил.

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

Итак, мой вопрос:

  • Что-то не так?
  • Это ошибка?
  • Есть ли обходной путь?

Ответы [ 2 ]

6 голосов
/ 12 июля 2011

У меня была такая же проблема. Я не мог остановить контейнер с моего сервера Hudson, пока он корректно останавливался на моей локальной машине с тем же pom.xml и теми же целями и параметрами Maven.

Проблема заключалась в том, что Hudson был на Tomcat, а контейнер и Tomcat использовали одни и те же порты. Изменение порта сервлета с 8080 на 8181, а порт AJP с 8009 на 8012 (числа были выбраны произвольно) решило проблему, и цель «стоп» успешно выполнена.

Мне пришлось изменить 2 порта, потому что конфликт был между 2 Tomcats, если конфликт между Tomcat и чем-то еще, может понадобиться только одно из 2 изменений.

2 строки, которые я использовал для смены портов:

<configuration>
     ...
     <properties>
        ...
        <cargo.servlet.port>8181</cargo.servlet.port>
        <cargo.tomcat.ajp.port>8012</cargo.tomcat.ajp.port>
        ...
    </properties>
    ...
</configuration>
6 голосов
/ 04 июля 2011

Возможно, что-то еще прослушивает порт 8080 на вашей машине. Это заставило бы груз думать, что кот не остановился. Вы можете изменить порт AJP для tomcat через конфигурацию груза на что-то менее распространенное. Смотрите этот блог для более подробной информации: http://kreskasnotes.blogspot.com/2011/07/problem-with-shutting-down-tomcat-via.html

...