maven dependency pulling a wrong dependency

耗尽温柔 提交于 2019-12-03 18:08:09

问题


I have a dependency as follows:

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.2</version>
        <scope>compile</scope>
    </dependency>

This is pulling down another dependency httpcore.4.1.4 which throws a ClassDefNotFound, when i deploy httpcore.4.2 everything works.

I added both of the dependencies as follows:

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.2</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>4.2</version>
        <scope>compile</scope>
    </dependency>

and still facing the same issue ie: mvn brings down httpcore.4.1.2 not httpcore.4.2

how can i resolve this?

EDIT:

added;

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.2</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    </dependencyManagement>

回答1:


You might have a transitive dependency, one your other dependencies depend on the version you don't want.

To get an overview of all dependencies, direct and transitive, try:

mvn dependency:tree

If you find a crash between different versions of the same dependency, the first thing you should do is figure out whether the crash is critical (do you need both?) If not, upgrade so that the lowest dependency version will become equal to the highest. If it is a transitive dependency consider upgrading the version of this.

If you just want to lock on to a specific version of the dependency, you have some choices:

Exclude the transitive dependency:

<dependency>
  <groupId>com.something</groupId>
  <artifactId>something</artifactId>
  <exclusions>
    <exclusion>
      <groupId>com.somethingElse</groupId>
      <artifactId>somethingElse</artifactId>
    </exclusion>
  </exclusions>
</dependency>

Include a specific version:

<dependency>
  <groupId>com.somethingElse</groupId>
  <artifactId>somethingElse</artifactId>
  <version>2.0</version>
</dependency>

Any dependency version added explicitly in your pom will override the version of any transitive dependency of the same groupId/artifactId.

Although being a bit of a puzzle, you should try to get compatible versions of your dependencies, that being version with the same version transitive dependencies.



来源:https://stackoverflow.com/questions/13635388/maven-dependency-pulling-a-wrong-dependency

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!