信息:没有在类路径上检测到Spring WebApplicationInitializer类型

时间:2014-04-08 13:34:15

标签: java spring spring-mvc tomcat7

当我从eclipse部署时,我有一个在我的tomcat7服务器上正常运行的spring项目:Run As>>在服务器上运行。 在eclipse选项卡" Servers"我明白了:

Servers
 Tomcat v7.0 Server at localhost [Started, Synchronized]
   my_project [Synchronized]
     spring-web-3.2.4-RELEASE.jar

我的项目:

  • 不使用web.xml,我使用javaconf @ annotations。
  • 不使用maven,我使用用户库

我看到项目在:

/srv/applications/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0

而且,我也看到了文件夹:conf,logs,temp,webapps,work,wtpwebapps

我确认当我从eclipse部署时,我的tomcat7服务器上的所有运行正常!

在eclipse控制台中我得到:

Apr 08, 2014 3:26:59 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:my_project' did not find a matching property.
Apr 08, 2014 3:27:00 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8888"]
Apr 08, 2014 3:27:00 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8843"]
Apr 08, 2014 3:27:01 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 3215 ms
Apr 08, 2014 3:27:01 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Apr 08, 2014 3:27:01 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.26
Apr 08, 2014 3:27:11 PM org.apache.catalina.core.ApplicationContext log
INFO: Spring WebApplicationInitializers detected on classpath: [my_project.web.context.WebApplicationInitializer@3599e94c]
Apr 08, 2014 3:27:12 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
Apr 08, 2014 3:27:24 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'dispatcher'
Apr 08, 2014 3:27:24 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8888"]
Apr 08, 2014 3:27:24 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8843"]
Apr 08, 2014 3:27:24 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 23821 ms

现在:问题 我在相同的tomcat7服务器/ var / lib / tomcat7 / webapps中部署相同的应用程序(使用文件.war)

我可以在没有数据的情况下打开我的初始页面网页

我在日志中看到:

INFO: No Spring WebApplicationInitializer types detected on classpath

当我重新启动tomcat7时,我进入了日志文件:

INFO: Destroying ProtocolHandler ["http-bio-8843"]
Apr 8, 2014 3:25:30 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:my_project' did not find a matching property.
Apr 8, 2014 3:25:30 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8888"]
Apr 8, 2014 3:25:31 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8843"]
Apr 8, 2014 3:25:31 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1664 ms
Apr 8, 2014 3:25:31 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Apr 8, 2014 3:25:31 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.26
Apr 8, 2014 3:25:38 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8888"]
Apr 8, 2014 3:25:38 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8843"]
Apr 8, 2014 3:25:38 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 7576 ms

9 个答案:

答案 0 :(得分:19)

我发现了错误: 我有一个使用jdk 1.6构建的库。 Spring主控制器和组件位于此库中。我如何使用jdk 1.7,它没有找到1.6中构建的类。

该解决方案全部使用“编译器合规级别:1.7”和“生成.class文件兼容性:1.6”,“源兼容性:1.6”构建。

我在Eclipse中设置了这个选项: 偏好\爪哇\编译器。

谢谢大家。

答案 1 :(得分:4)

我的愚蠢理由是:自动构建已被禁用!

答案 2 :(得分:2)

在WebLogic服务器中部署带有spring集成bean的WAR时,我收到了此消息“在类路径上检测到没有Spring WebApplicationInitializer类型”。 实际上,我可以观察到servlet URL返回404 Not Found并且在服务器日志中带有否定音“No Spring ... etc”的信息消息旁边,我的spring配置中似乎没有其他任何错误;没有构建或部署错误,没有投诉。 实际上,我怀疑beans.xml(spring context XML)实际上根本没有被拾取,并且这与Oracle jDeveloper中非常具体的人工制品组织有关。当您在项目属性中的“部署”主题下编辑部署配置文件时,解决方案是仔细使用WEB-INF / classes类别的“贡献者”和“过滤器”。

准确地说,我建议用jDeveloper默认的“beans.xml”命名你的spring上下文,并将它并排放在WEB-INF子目录本身(在你的web Apllication源路径下,例如像< ...您的项目路径> / public_html /)。然后在WEB-INF / classes类别中(编辑部署配置文件时),您可以检查“贡献者”列表中的Project HTML根目录,然后选择过滤器中的beans.xml,然后确保您的web.xml具有context-param值,如classpath:beans.xml。

一旦修复了,我就能够进步,经过一些更多的bean配置更改和实现后,消息“在类路径上检测到No Spring WebApplicationInitializer类型”回来了!实际上,我没有注意到它何时以及为什么会回来。第二次,我添加了一个

public class HttpGatewayInit implements WebApplicationInitializer { ... }

实现了空的继承方法,整个应用程序工作正常!

...如果你觉得java EE开发已经变得有些过于疯狂了,那些XML配置文件(一些是手动编辑,另一些是通过向导)由级联的变种初始化程序解释,让我坚持认为我完全分享你的点。

答案 3 :(得分:2)

确保你的log4j配置正确,可能是一个异常,但你只看到了一半的图片。

请参阅https://stackoverflow.com/a/16817018/1249304

答案 4 :(得分:1)

我也有同样的问题。我的maven有tomcat7插件,但JRE环境是1.6。我将tomcat7更改为tomcat6,错误消失了。

答案 5 :(得分:0)

这是常见错误,请确保您的file.war已正确构建。只需打开.war文件,检查您的WebApplicationInitializer是否存在。

答案 6 :(得分:0)

我在java7应用程序中嵌入了Tomcat 8的类似问题。

当我在我的应用程序中启动Tomcat时,它工作正常。但是当我通过Maven启动它以进行集成测试时,我收到了这个错误:"没有在类路径"上检测到Spring WebApplicationInitializer类型。

我通过将org.apache.tomcat.embed:tomcat-embed-*依赖项从8.0.29升级到8.0.47来修复它。

答案 7 :(得分:-1)

对于eclipse用户: 解决方案很简单只需改变项目的性质Spring Tools->添加spring项目性质

进行。

答案 8 :(得分:-1)

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>          
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
 </plugin>

这是应该在pom.xml中的重要插件。我花了两天时间调试和研究。这是解决方案。这是Apache插件,告诉maven使用给定的编译器。