NoSuchMethodError和Dependency pom order

时间:2016-10-15 05:09:26

标签: java eclipse maven jetty cxf

我面临一个奇怪的情况。

在一个非常混乱的项目中(根本就是典型的不良实践场景),显然我无法进行太多修改,我正在处理我的子模块项目(目前还没有完全由我编写和编程,只是分配了其中有一些编码任务),它有很多父依赖。

由于我需要Jetty Server(Jetty 8),我已将它添加到我的pom中,加上似乎需要的cxf-bundle。

该项目工作正常如果我把:

<dependencies>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>8.2.0.v20160908</version> 
        </dependency>
        <!-- --> 
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-bundle</artifactId>
            <version>2.6.8</version> 
     <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    ...

请注意我选择了Jetty,因为它应该是最新的Jetty 8依赖Central(为什么jetty 8?我正在使用JDK 1.7 ...),cxf包有点随机:我'我试图选择一个时间接近Jetty的cxf版本。

cxf-bundle排除是存在的,因为没有它们,它将不再编译。

这样,码头醒来,我能够做到:

  

Endpoint.publish(“http://localhost:1243/test”,新的   MyWsTestClassImpl());

......一切正常。

但是,如果我把这些依赖项放在我得到的封闭</dependencies>标记之前:

java.lang.NoSuchMethodError: org.apache.cxf.transport.http_jetty.JettyHTTPDestination.setupMessage(Lorg/apache/cxf/message/Message;Ljavax/servlet/ServletContext;Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V
    at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:338) ~[cxf-bundle-2.6.8.jar:2.6.8]
    at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:312) ~[cxf-bundle-2.6.8.jar:2.6.8]
    at org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:72) ~[cxf-bundle-2.6.8.jar:2.6.8]
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1088) ~[jetty-server-8.2.0.v20160908.jar:8.2.0.v20160908]
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1024) ~[jetty-server-8.2.0.v20160908.jar:8.2.0.v20160908]
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) ~[jetty-server-8.2.0.v20160908.jar:8.2.0.v20160908]
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) ~[jetty-server-8.2.0.v20160908.jar:8.2.0.v20160908]
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) ~[jetty-server-8.2.0.v20160908.jar:8.2.0.v20160908]
    at org.eclipse.jetty.server.Server.handle(Server.java:366) ~[jetty-server-8.2.0.v20160908.jar:8.2.0.v20160908]
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494) [jetty-server-8.2.0.v20160908.jar:8.2.0.v20160908]
    at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:973) [jetty-server-8.2.0.v20160908.jar:8.2.0.v20160908]
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1035) [jetty-server-8.2.0.v20160908.jar:8.2.0.v20160908]
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:641) [jetty-http-8.2.0.v20160908.jar:8.2.0.v20160908]
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:231) [jetty-http-8.2.0.v20160908.jar:8.2.0.v20160908]
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) [jetty-server-8.2.0.v20160908.jar:8.2.0.v20160908]
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696) [jetty-io-8.2.0.v20160908.jar:8.2.0.v20160908]
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53) [jetty-io-8.2.0.v20160908.jar:8.2.0.v20160908]
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) [jetty-util-8.2.0.v20160908.jar:8.2.0.v20160908]
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) [jetty-util-8.2.0.v20160908.jar:8.2.0.v20160908]
    at java.lang.Thread.run(Thread.java:745) [na:1.7.0_79]

我发现该方法将在另一个cxf库中:

<dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http-jetty</artifactId>
        <version>2.6.8</version> 
    </dependency>

但是,即使我添加了它,我也得到了相同的旧堆栈。 因为我有点害怕这种怪物项目,而且我坚信程序员必须知道发生了什么,我决定和你一起挖掘这个问题,因为到目前为止我没有得到解决方案

0 个答案:

没有答案
相关问题