tomcat 7 embedded doesn't shutdown correctly ClassNotFoundException ContainerBase$StopChild

2.9k views Asked by At

I'm trying to make work integration test with Tomcat7 embedded plugin with this config:

            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>29360</port>
                    <systemProperties>
                        <logback.configurationFile>${project.build.testOutputDirectory}/logback-test.xml</logback.configurationFile>
                        <psw.config>${project.build.testOutputDirectory}</psw.config>
                        <spring.profiles.active>test-e2e</spring.profiles.active>
                    </systemProperties>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-api</artifactId>
                        <version>${slf4j.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>ch.qos.logback</groupId>
                        <artifactId>logback-classic</artifactId>
                        <version>${logback.version}</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>run-tomcat</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>run-war-only</goal>
                        </goals>
                        <configuration>
                            <fork>true</fork>
                        </configuration>
                    </execution>
                    <execution>
                        <id>stop-tomcat</id>
                        <phase>post-integration-test</phase>
                        <goals>
                            <goal>shutdown</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

However when the shutdown happens, I kept having this error: Caused by: java.lang.ClassNotFoundException: org.apache.catalina.core.ContainerBase$StopChild

[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2:49.618s
[INFO] Finished at: Sun Dec 22 07:58:06 CET 2013
[INFO] Final Memory: 163M/259M
[INFO] ------------------------------------------------------------------------

ERROR: IllegalAccessException for stop method in class org.apache.tomcat.maven.plugin.tomcat7.run.ExtendedTomcat
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.tomcat.maven.common.run.EmbeddedRegistry.shutdownAll(EmbeddedRegistry.java:110)
    at org.apache.tomcat.maven.common.run.EmbeddedRegistry$1.run(EmbeddedRegistry.java:69)
Caused by: org.apache.catalina.LifecycleException: Failed to stop component [StandardServer[-1]]
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:236)
    at org.apache.catalina.startup.Tomcat.stop(Tomcat.java:351)
    ... 6 more
Caused by: org.apache.catalina.LifecycleException: Failed to stop component [StandardService[Tomcat]]
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:236)
    at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:753)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    ... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to stop component [StandardEngine[Tomcat]]
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:236)
    at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:502)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    ... 9 more
Caused by: java.lang.NoClassDefFoundError: org/apache/catalina/core/ContainerBase$StopChild
    at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:1173)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    ... 11 more
Caused by: java.lang.ClassNotFoundException: org.apache.catalina.core.ContainerBase$StopChild
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:259)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:235)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:227)
    ... 13 more

Process finished with exit code 0

Any tips to correct this ?

1

There are 1 answers

0
notclive On

If you run mvn integration-test, it won't run the post-integration-test phase, which can lead to this error. Use mvn verify instead.