【问题标题】:How to make a maven sub-dependency "provided" in 3rd party dependency?如何在 3rd 方依赖项中“提供”一个 Maven 子依赖项?
【发布时间】:2013-09-29 21:26:06
【问题描述】:

当我在我的网络模数中运行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,我看到这个谷歌依赖在它的依赖树下有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

这个answer 建议创建servlet-api 依赖provided,但是如何在我不拥有的依赖中执行此操作?

【问题讨论】:

    标签: java maven gdata


    【解决方案1】:

    您不能更改第 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. 在正确的&lt;dependency&gt; 中使用&lt;exclusions&gt;。否则无效。
    2. &lt;exclusions&gt; 适用于 &lt;dependency&gt; 的整个子树,包括其所有嵌套依赖项。只需在您的 POM 中找到顶级 &lt;dependency&gt; 会带来不需要的 jar 并在那里使用 &lt;exclusions&gt;
    3. 同一个不需要的 jar 可能来自多个依赖项。在一个地方排除它后,刷新依赖树,并检查不需要的 jar 是否来自其他依赖。如果是,则在其他地方也将其排除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 2019-03-23
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 2011-09-02
      相关资源
      最近更新 更多