3

当我mvn tomcat:run在我的网络模数中运行时,我收到了这个错误。

SEVERE: Servlet /web threw load() exception
java.lang.ClassCastException: org.springframework.web.servlet.DispatcherServlet cannot be cast to javax.servlet.Servlet

当我将依赖项添加到我拥有的另一个模数时,就会出现问题,特别是因为另一个模数包含com.google.gdata:core依赖项。我跑mvn dependency:tree了,我看到这个 google 依赖项在servlet-api它的依赖项树下,所以我认为这就是问题所在。但我不知道如何解决它。

|  \- com.google.gdata:core:jar:1.47.1:compile
|     +- com.google.guava:guava:jar:13.0.1:compile
|     +- com.google.oauth-client:google-oauth-client-jetty:jar:1.11.0-beta:compile
|     |  +- com.google.oauth-client:google-oauth-client-java6:jar:1.11.0-beta:compile
|     |  |  \- com.google.oauth-client:google-oauth-client:jar:1.11.0-beta:compile
|     |  |     \- com.google.http-client:google-http-client:jar:1.11.0-beta:compile
|     |  |        +- org.apache.httpcomponents:httpclient:jar:4.0.3:compile
|     |  |        |  \- org.apache.httpcomponents:httpcore:jar:4.0.1:compile
|     |  |        \- xpp3:xpp3:jar:1.1.4c:compile
|     |  \- org.mortbay.jetty:jetty:jar:6.1.26:compile
|     |     +- org.mortbay.jetty:jetty-util:jar:6.1.26:compile
|     |     \- org.mortbay.jetty:servlet-api:jar:2.5-20081211:compile
|     +- com.google.code.findbugs:jsr305:jar:1.3.7:compile
|     \- javax.mail:mail:jar:1.4:compile
|        \- javax.activation:activation:jar:1.1:compile

这个答案建议制作servlet-api依赖provided,但是如何在我不拥有的依赖中做到这一点?

4

1 回答 1

4

您不能更改第 3 方依赖项的 POM。但是你可以排除它的依赖

<dependency>
  <groupId>.....</groupId>
  <artifactId>.....</artifactId>
  <version>.....</version>
  <scope>compile</scope>
  <exclusions>
    <exclusion>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>servlet-api</artifactId>
    </exclusion>
  </exclusions> 
</dependency>

重要的:

  1. 使用<exclusions>在正确的<dependency>. 否则不会有效果。
  2. <exclusions>适用于 的整个子树<dependency>,包括其所有嵌套依赖项。<dependency>只需在您的 POM 中找到带有不需要的 jar 的顶层并<exclusions>在那里使用。
  3. 同一个不受欢迎的 jar 可能来自多个依赖项。在一个地方排除它之后,刷新依赖树,并检查不需要的 jar 是否来自其他依赖。如果是,那么在其他地方也排除它。
于 2013-09-29T13:26:06.333 回答