我正在Eclipse Juno中开发一个webapp作为一个Maven多模块项目,在开发过程中使用Spring MVC和Jetty Maven插件版本8.1.7.v20120910和HSQL作为内存数据库。我想使用 jetty:run 目标从 IDE 中启动 Jetty。问题是我看不到 Spring 的任何日志输出,但我怀疑上下文确实正在加载,因为控制台日志输出会短暂停止——只要加载我如此小的 Spring 上下文——在抛出 NPE 之前一个自动装配的 bean。所以我怀疑是在启动 Spring 上下文时出了点问题。
这是在它短暂“停止”之前的日志输出:
[INFO] web.xml file = file:/F:/projects/matching/template/template-app/src/main/webapp/WEB-INF/web.xml
[INFO] Webapp directory = F:\projects\matching\template\template-app\src\main\webapp
2013-01-26 11:09:18.130:INFO:oejs.Server:jetty-8.1.7.v20120910
2013-01-26 11:09:20.704:INFO:oejpw.PlusConfiguration:No Transaction manager found - if your webapp requires one, please configure one.
在暂停之后是:
2013-01-26 11:09:35.884:INFO:/:No Spring WebApplicationInitializer types detected on classpath
2013-01-26 11:09:36.742:INFO:oejsh.ContextHandler:started o.m.j.p.JettyWebAppContext{/,file:/F:/projects/matching/template/template-app/src/main/webapp/},file:/F:/projects/matching/template/template-app/src/main/webapp/
2013-01-26 11:09:36.742:INFO:oejsh.ContextHandler:started o.m.j.p.JettyWebAppContext{/,file:/F:/projects/matching/template/template-app/src/main/webapp/},file:/F:/projects/matching/template/template-app/src/main/webapp/
2013-01-26 11:09:36.742:INFO:oejsh.ContextHandler:started o.m.j.p.JettyWebAppContext{/,file:/F:/projects/matching/template/template-app/src/main/webapp/},file:/F:/projects/matching/template/template-app/src/main/webapp/
2013-01-26 11:09:36.743:WARN:oejw.WebAppContext:Failed startup of context o.m.j.p.JettyWebAppContext{/,file:/F:/projects/matching/template/template-app/src/main/webapp/},file:/F:/projects/matching/template/template-app/src/main/webapp/
java.lang.NullPointerException
现在我有信心我将能够修复导致 NPE 的任何问题,但为此我需要查看我的 Spring 上下文发生了什么。去年,我曾经使用相同的工具组合工作,当时一位同事使用我认为与我现在使用的配置相同的配置对其进行了设置。
我整个早上都在网上搜索,找不到任何有用的东西,只有模糊的建议,即在外部运行 Jetty 并组装战争和部署应用程序,这正是我想要的。
这是我的 pom 的构建配置:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webXml>src\main\webapp\WEB-INF\web.xml</webXml>
<warName>template</warName>
</configuration>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<webXml>src\main\webapp\WEB-INF\web.xml</webXml>
<webApp>
<jettyEnvXml>${jettyEnvXml-file}</jettyEnvXml>
</webApp>
<contextPath>template</contextPath>
<systemProperties>
<systemProperty>
<name>log4j.configuration</name>
<value>file:jetty/log4j-jetty.properties</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
这是我对 Jetty 的 log4j 配置:
log4j.debug=true
log4j.threshold=ALL
log4j.rootLogger=DEBUG, consoleLogger
log4j.appender.consoleLogger=org.apache.log4j.ConsoleAppender
log4j.appender.consoleLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleLogger.layout.ConversionPattern=%-5p [%t]: %m%n
log4j.appender.consoleLogger.Threshold=TRACE
它可能与我日志开头的这一行有关吗?
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
但据我所知,这只是一个可以忽略的 m2e 错误。不过,我的类路径中有 slf4j。
当我在 SpringJPA 模块中使用 HSQL 运行单元测试时,它运行良好,所以我怀疑这是一个 Jetty 问题,或者我的 log4j 配置是假的。
非常感谢任何想法、提示和帮助。