我正在尝试将Jetty服务器嵌入到自动化测试中,因此我在项目中添加了以下依赖项:
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>7.6.13.v20130916</version>
<scope>test</scope>
</dependency>
我正在使用Jetty 7,因为Web应用程序使用Java 6,Servlet 2.5。
但是当我尝试启动嵌入式Jetty服务器时,我得到:
java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
at org.eclipse.jetty.util.log.JettyAwareLogger.log(JettyAwareLogger.java:607)
at org.eclipse.jetty.util.log.JettyAwareLogger.warn(JettyAwareLogger.java:431)
at org.eclipse.jetty.util.log.Slf4jLog.warn(Slf4jLog.java:69)
at org.eclipse.jetty.util.component.AbstractLifeCycle.setFailed(AbstractLifeCycle.java:204)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:74)
我一直试图弄清楚出了什么问题,但到目前为止,我所采取的步骤都没有解决问题。这是我到目前为止所做的一系列清单:
slf4j-api
slf4j-api
(1.5.11,1.6.1,1.6.4,1.7.5)null
和org.slf4j.spi.LocationAwareLogger
org.slf4j.Marker
我希望有人能够对这个问题提供新的见解。感谢。
答案 0 :(得分:4)
我打赌你在sl4j
罐之间遇到了compatibility problem。尝试检查最终工件的mvn dependency:tree
输出。也许你有两个不同版本的sl4j
jar,你不能先预测哪些负载。尝试均衡所有sl4j
版本。
答案 1 :(得分:3)
关于madhead的answer的信息非常有用,但我将记录我为其他人(将会遇到同样问题)所做的事情的详细信息。
正如上面提到的答案所说,这是slf4j
罐子的问题。为了验证我做了以下事情:
slf4j
的所有依赖项的排除。Display Result of Evaluating Selected Text
由于某种原因首先被禁用。slf4j
的1.5.8版本仍然被添加到类路径中,无论我是否为其指定了排除。slf4j-jdk14 1.5.8
的依赖项,所以我只是将其更新为{{1} }。
1.6.1
下指定排除slf4j-api
,因为它指的是版本1.5.8,并将直接相关性添加到slf4j-jdk14 1.6.1
。