2015-01-08 3 views
0

Я создал проект, используя maven. Позже я подключился и установил плагин maven tomcat. Я пытаюсь запустить проект, и все в порядке. Tomcat работает правильно, я вижу вид моего проекта в браузере. И теперь я должен установить свою диспетчерскую-servlet.xml, и я хочу сделать это таким образом:tomcat7 maven plugin Ошибка WebApplicationInitializer

package com.myproject; 

import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRegistration; 

import org.springframework.web.WebApplicationInitializer; 
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; 
import org.springframework.web.servlet.DispatcherServlet; 

public class SpringWebAppInitializer implements WebApplicationInitializer { 

    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext(); 
     appContext.register(ApplicationContextConfig.class); 

     ServletRegistration.Dynamic dispatcher = servletContext.addServlet(
       "SpringDispatcher", new DispatcherServlet(appContext)); 
     dispatcher.setLoadOnStartup(1); 
     dispatcher.addMapping("/"); 

    } 
} 

После того как я сделал это, и установить pom.xml я вижу, это исключение, когда я использую

МВН tomcat7: бег

:

SEVERE: A child container failed during start 
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/ApplicationAnnotations2]] 
    at java.util.concurrent.FutureTask.report(FutureTask.java:122) 
    at java.util.concurrent.FutureTask.get(FutureTask.java:188) 
    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:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/ApplicationAnnotations2]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
    ... 6 more 
Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer 
    at org.apache.catalina.startup.ContextConfig.getServletContainerInitializer(ContextConfig.java:1670) 
    at org.apache.catalina.startup.ContextConfig.getServletContainerInitializers(ContextConfig.java:1652) 
    at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1562) 
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1270) 
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878) 
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5322) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 6 more 

Jan 09, 2015 12:36:25 AM 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]] 
    at java.util.concurrent.FutureTask.report(FutureTask.java:122) 
    at java.util.concurrent.FutureTask.get(FutureTask.java:188) 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123) 
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.startup.Tomcat.start(Tomcat.java:341) 
    at org.apache.tomcat.maven.plugin.tomcat7.run.AbstractRunMojo.startContainer(AbstractRunMojo.java:1238) 
    at org.apache.tomcat.maven.plugin.tomcat7.run.AbstractRunMojo.execute(AbstractRunMojo.java:592) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) 
    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:116) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) 
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:355) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:216) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:160) 
    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:606) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
    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:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.apache.catalina.LifecycleException: A child container failed during start 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1131) 
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 6 more 

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 3.584 s 
[INFO] Finished at: 2015-01-09T00:36:25+02:00 
[INFO] Final Memory: 14M/245M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:run (default-cli) on project ApplicationAnnotations2: Could not start Tomcat: Failed to start component [StandardServer[-1]]: Failed to start component [StandardService[Tomcat]]: Failed to start component [StandardEngine[Tomcat]]: A child container failed during start -> [Help 1] 

Мой pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.myproject</groupId> 
    <artifactId>ApplicationAnnotations</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>ApplicationAnnotations Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
    <spring.version>4.1.4.RELEASE</spring.version> 
    </properties> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
    </dependency> 
    </dependencies> 
    <build> 
    <finalName>ApplicationAnnotations</finalName> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.tomcat.maven</groupId> 
     <artifactId>tomcat7-maven-plugin</artifactId> 
     <configuration> 
      <url>http://localhost:8080/manager/text</url> 
      <server>tomcatserver</server> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

, когда я использую mvn tomcat7:redeploy я могу видеть это одно:

[ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:redeploy (default-cli) on project ApplicationAnnotations2: Tomcat return http status error: 401, Reason Phrase: Unauthorized: 
[ERROR] <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
[ERROR] <html> 
[ERROR] <head> 
[ERROR] <title>401 Unauthorized</title> 
[ERROR] <style type="text/css"> 
[ERROR] <!-- 
[ERROR] BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;font-size:12px;} 
[ERROR] H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} 
[ERROR] PRE, TT {border: 1px dotted #525D76} 
[ERROR] A {color : black;}A.name {color : black;} 
[ERROR] --> 
[ERROR] </style> 
[ERROR] </head> 
[ERROR] <body> 
[ERROR] <h1>401 Unauthorized</h1> 
[ERROR] <p> 
[ERROR] You are not authorized to view this page. If you have not changed 
[ERROR] any configuration files, please examine the file 
[ERROR] <tt>conf/tomcat-users.xml</tt> in your installation. That 
[ERROR] file must contain the credentials to let you use this webapp. 
[ERROR] </p> 
[ERROR] <p> 
[ERROR] For example, to add the <tt>manager-gui</tt> role to a user named 
[ERROR] <tt>tomcat</tt> with a password of <tt>s3cret</tt>, add the following to the 
[ERROR] config file listed above. 
[ERROR] </p> 
[ERROR] <pre> 
[ERROR] &lt;role rolename="manager-gui"/&gt; 
[ERROR] &lt;user username="tomcat" password="s3cret" roles="manager-gui"/&gt; 
[ERROR] </pre> 
[ERROR] <p> 
[ERROR] Note that for Tomcat 7 onwards, the roles required to use the manager 
[ERROR] application were changed from the single <tt>manager</tt> role to the 
[ERROR] following four roles. You will need to assign the role(s) required for 
[ERROR] the functionality you wish to access. 
[ERROR] </p> 
[ERROR] <ul> 
[ERROR] <li><tt>manager-gui</tt> - allows access to the HTML GUI and the status 
[ERROR] pages</li> 
[ERROR] <li><tt>manager-script</tt> - allows access to the text interface and the 
[ERROR] status pages</li> 
[ERROR] <li><tt>manager-jmx</tt> - allows access to the JMX proxy and the status 
[ERROR] pages</li> 
[ERROR] <li><tt>manager-status</tt> - allows access to the status pages only</li> 
[ERROR] </ul> 
[ERROR] <p> 
[ERROR] The HTML interface is protected against CSRF but the text and JMX interfaces 
[ERROR] are not. To maintain the CSRF protection: 
[ERROR] </p> 
[ERROR] <ul> 
[ERROR] <li>Users with the <tt>manager-gui</tt> role should not be granted either 
[ERROR] the <tt>manager-script</tt> or <tt>manager-jmx</tt> roles.</li> 
[ERROR] <li>If the text or jmx interfaces are accessed through a browser (e.g. for 
[ERROR] testing since these interfaces are intended for tools not humans) then 
[ERROR] the browser must be closed afterwards to terminate the session.</li> 
[ERROR] </ul> 
[ERROR] <p> 
[ERROR] For more information - please see the 
[ERROR] <a href="/docs/manager-howto.html">Manager App HOW-TO</a>. 
[ERROR] </p> 
[ERROR] </body> 
[ERROR] 
[ERROR] </html> 
[ERROR] -> [Help 1] 

мой Maven settings.xml

<server> 
    <id>tomcatserver</id> 
    <username>admin</username> 
    <password>admin</password> 
</server> 

мой Apache Tomcat-users.xml

<role rolename="manager-gui"/> 
<role rolename="manager-script"/> 
<role rolename="manager-jmx"/> 
<role rolename="manager-status"/> 
<role rolename="admin-gui"/> 
<role rolename="admin-script"/> 
<user username="admin" password="admin" roles="manager-gui, manager-script, manager-jmx, manager-status, admin-gui, admin-script"/> 

но с настройками все должно быть в порядке, потому что с другими проекты, в которых существует диспетчерская-servlet.xml все работает отлично

ответ

2

Это очень вероятно, из-за сервлет-апи банку упакована с приложением, попробуйте изменить сферу сервлет-апи, чтобы при условии, и она должна быть работа:

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.1.0</version> 
    <scope>provided</scope> 
</dependency> 
+0

это работает, спасибо – alemale

0

Я подозреваю, что ваша проблема может быть вызвана:

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.1.0</version> 
</dependency> 

Tomcat 7 реализует сервлет 3.0 спецификации. Попробуйте изменить версию на 3.0.

Смежные вопросы