Skip to content

Spring Boot 1.2.0.M2 doesn't work with Tomcat 7 Maven Plugin #1719

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
mraible opened this issue Oct 15, 2014 · 4 comments
Closed

Spring Boot 1.2.0.M2 doesn't work with Tomcat 7 Maven Plugin #1719

mraible opened this issue Oct 15, 2014 · 4 comments
Assignees
Labels
type: bug A general bug
Milestone

Comments

@mraible
Copy link

mraible commented Oct 15, 2014

With Spring 1.1.7 (and below), I'm able to configure the tomcat7-maven-plugin to start/stop before/after running my integration tests. I realize it's possible to use an @IntegrationTEST annotation to do this, but I want to verify my app will run in Tomcat since that's what production runs.

Here's the error I see with 1.2.0.M2:

Oct 15, 2014 3:52:14 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Oct 15, 2014 3:52:14 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Tomcat
Oct 15, 2014 3:52:14 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.47
Oct 15, 2014 3:52:18 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    ... 6 more
Caused by: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
    at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:724)
    at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:531)
    at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:355)
    at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72)
    at java.lang.Class.createAnnotationData(Class.java:3410)
    at java.lang.Class.annotationData(Class.java:3399)
    at java.lang.Class.getDeclaredAnnotations(Class.java:3366)
    at org.springframework.core.annotation.AnnotationUtils.findAnnotation(AnnotationUtils.java:371)
    at org.springframework.core.annotation.AnnotationUtils.findAnnotation(AnnotationUtils.java:333)
    at org.springframework.core.annotation.OrderUtils.getOrder(OrderUtils.java:58)
    at org.springframework.core.annotation.OrderUtils.getOrder(OrderUtils.java:47)
    at org.springframework.core.annotation.AnnotationAwareOrderComparator.findOrder(AnnotationAwareOrderComparator.java:79)
    at org.springframework.core.OrderComparator.getOrder(OrderComparator.java:105)
    at org.springframework.core.OrderComparator.getOrder(OrderComparator.java:94)
    at org.springframework.core.OrderComparator.doCompare(OrderComparator.java:77)
    at org.springframework.core.OrderComparator.compare(OrderComparator.java:63)
    at java.util.TimSort.countRunAndMakeAscending(TimSort.java:351)
    at java.util.TimSort.sort(TimSort.java:216)
    at java.util.Arrays.sort(Arrays.java:1435)
    at java.util.Collections.sort(Collections.java:230)
    at org.springframework.core.annotation.AnnotationAwareOrderComparator.sort(AnnotationAwareOrderComparator.java:111)
    at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:171)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5423)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 6 more

And the configuration in my pom.xml:

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <path>/</path>
    </configuration>
    <executions>
        <execution>
            <id>start-tomcat</id>
            <phase>pre-integration-test</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <fork>true</fork>
                <port>${tomcat.http.port}</port>
            </configuration>
        </execution>
        <execution>
            <id>stop-tomcat</id>
            <phase>post-integration-test</phase>
            <goals>
                <goal>shutdown</goal>
            </goals>
        </execution>
    </executions>
</plugin>
@mraible
Copy link
Author

mraible commented Oct 15, 2014

In case Tomcat 8 is required by Spring Boot 1.2, it looks the tomcat8-maven-plugin is not released yet:

https://issues.apache.org/jira/browse/MTOMCAT-234

I tried using Cargo's Tomcat 8.x support but received a similar error:

[INFO] [talledLocalContainer] Oct 15, 2014 4:11:52 PM org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer] INFO: Server version: Apache Tomcat/8.0.14
[INFO] [talledLocalContainer] Oct 15, 2014 4:11:52 PM org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer] INFO: Server built:   Sep 24 2014 09:01:51
[INFO] [talledLocalContainer] Oct 15, 2014 4:11:52 PM org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer] INFO: Server number:  8.0.14.0
[INFO] [talledLocalContainer] Oct 15, 2014 4:11:52 PM org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer] INFO: OS Name:        Mac OS X
[INFO] [talledLocalContainer] Oct 15, 2014 4:11:52 PM org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer] INFO: OS Version:     10.9.5
[INFO] [talledLocalContainer] Oct 15, 2014 4:11:52 PM org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer] INFO: Architecture:   x86_64
[INFO] [talledLocalContainer] Oct 15, 2014 4:11:52 PM org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer] INFO: JVM Version:    1.8.0-b132
[INFO] [talledLocalContainer] Oct 15, 2014 4:11:52 PM org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer] INFO: JVM Vendor:     Oracle Corporation
...
[INFO] [talledLocalContainer] SEVERE: ContainerBase.addChild: start:
[INFO] [talledLocalContainer] org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/app-name]]
[INFO] [talledLocalContainer]   at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
[INFO] [talledLocalContainer]   at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:724)
[INFO] [talledLocalContainer]   at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:700)
[INFO] [talledLocalContainer]   at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:714)
[INFO] [talledLocalContainer]   at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:919)
[INFO] [talledLocalContainer]   at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1703)
[INFO] [talledLocalContainer]   at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[INFO] [talledLocalContainer]   at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[INFO] [talledLocalContainer]   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[INFO] [talledLocalContainer]   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[INFO] [talledLocalContainer]   at java.lang.Thread.run(Thread.java:744)
[INFO] [talledLocalContainer] Caused by: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
[INFO] [talledLocalContainer]   at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:724)
[INFO] [talledLocalContainer]   at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:531)
[INFO] [talledLocalContainer]   at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:355)
[INFO] [talledLocalContainer]   at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286)
[INFO] [talledLocalContainer]   at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120)
[INFO] [talledLocalContainer]   at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72)
[INFO] [talledLocalContainer]   at java.lang.Class.createAnnotationData(Class.java:3410)
[INFO] [talledLocalContainer]   at java.lang.Class.annotationData(Class.java:3399)
[INFO] [talledLocalContainer]   at java.lang.Class.getDeclaredAnnotations(Class.java:3366)
[INFO] [talledLocalContainer]   at org.springframework.core.annotation.AnnotationUtils.findAnnotation(AnnotationUtils.java:371)
[INFO] [talledLocalContainer]   at org.springframework.core.annotation.AnnotationUtils.findAnnotation(AnnotationUtils.java:333)
[INFO] [talledLocalContainer]   at org.springframework.core.annotation.OrderUtils.getOrder(OrderUtils.java:58)
[INFO] [talledLocalContainer]   at org.springframework.core.annotation.OrderUtils.getOrder(OrderUtils.java:47)
[INFO] [talledLocalContainer]   at org.springframework.core.annotation.AnnotationAwareOrderComparator.findOrder(AnnotationAwareOrderComparator.java:79)
[INFO] [talledLocalContainer]   at org.springframework.core.OrderComparator.getOrder(OrderComparator.java:105)
[INFO] [talledLocalContainer]   at org.springframework.core.OrderComparator.getOrder(OrderComparator.java:94)
[INFO] [talledLocalContainer]   at org.springframework.core.OrderComparator.doCompare(OrderComparator.java:78)
[INFO] [talledLocalContainer]   at org.springframework.core.OrderComparator.compare(OrderComparator.java:63)
[INFO] [talledLocalContainer]   at java.util.TimSort.countRunAndMakeAscending(TimSort.java:351)
[INFO] [talledLocalContainer]   at java.util.TimSort.sort(TimSort.java:216)
[INFO] [talledLocalContainer]   at java.util.Arrays.sort(Arrays.java:1435)
[INFO] [talledLocalContainer]   at java.util.Collections.sort(Collections.java:230)
[INFO] [talledLocalContainer]   at org.springframework.core.annotation.AnnotationAwareOrderComparator.sort(AnnotationAwareOrderComparator.java:111)
[INFO] [talledLocalContainer]   at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:171)
[INFO] [talledLocalContainer]   at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5210)
[INFO] [talledLocalContainer]   at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
[INFO] [talledLocalContainer]   ... 10 more

Cargo configuration:

<cargo.container>tomcat8x</cargo.container>
<cargo.container.url>
    http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.14/bin/apache-tomcat-8.0.14.zip
</cargo.container.url>
<cargo.container.home>${env.CATALINA_HOME}</cargo.container.home>
<cargo.host>localhost</cargo.host>
<cargo.port>8080</cargo.port>
<cargo.version>1.4.10</cargo.version>

...

<plugin>
    <groupId>org.codehaus.cargo</groupId>
    <artifactId>cargo-maven2-plugin</artifactId>
    <version>${cargo.version}</version>
    <configuration>
        <container>
            <containerId>${cargo.container}</containerId>
            <home>${cargo.container.home}</home>
            <zipUrlInstaller>
                <url>${cargo.container.url}</url>
                <extractDir>${installDir}</extractDir>
            </zipUrlInstaller>
        </container>
        <configuration>
            <home>${project.build.directory}/${cargo.container}/container</home>
            <properties>
                <cargo.hostname>${cargo.host}</cargo.hostname>
                <cargo.servlet.port>${cargo.port}</cargo.servlet.port>
                <!-- To prevent conflicts with already running instances -->
                <cargo.tomcat.ajp.port>8123</cargo.tomcat.ajp.port>
            </properties>
        </configuration>
    </configuration>
    <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>
</plugin>

My environment:

OS X 10.9.5

$ java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

@wilkinsona
Copy link
Member

You've hit the problem reported in #1696. It should be fixed in the latest 1.2 snapshots.

A (horrible) workaround is to add Jersey to the classpath and exclude its auto-configuration.

@mraible
Copy link
Author

mraible commented Oct 16, 2014

I tried upgrading my project to 1.2.0.BUILD-SNAPSHOT and this still happens when I do "mvn tomcat7:run".

@mraible
Copy link
Author

mraible commented Oct 16, 2014

Adding Jersey as a dependency and adding the following does work. Thanks!

@EnableAutoConfiguration(exclude = JerseyAutoConfiguration.class)

@wilkinsona wilkinsona self-assigned this Oct 17, 2014
@wilkinsona wilkinsona reopened this Oct 17, 2014
@wilkinsona wilkinsona added the type: bug A general bug label Oct 20, 2014
@snicoll snicoll added this to the 1.2.0.RC1 milestone Mar 21, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: bug A general bug
Projects
None yet
Development

No branches or pull requests

3 participants