在 Maven 依賴項中包含不同版本的庫,完全破壞了我的構建 (Including a different version of a library, in a maven dependency totally broke my build)


問題描述

在 Maven 依賴項中包含不同版本的庫,完全破壞了我的構建 (Including a different version of a library, in a maven dependency totally broke my build)

So I had 

 <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson‑jaxrs</artifactId>
            <version>1.8.3</version>
            <scope>${defaultScope}</scope>
        </dependency>

I included this

   <dependency>
            <groupId>org.springframework.social</groupId>
            <artifactId>spring‑social‑web</artifactId>
            <version>1.0.2.RELEASE</version>
        </dependency>

which itself includes this

 <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson‑mapper‑asl</artifactId>
      <version>1.9.3</version>
      <scope>test</scope>
    </dependency>

Which resulted in a no class not found for jsonwrapper.

I updated my original version of jackson dependency to be up‑to‑date with the spring‑social included version, and it now works.

This seem rather fragile/unfriendly, is there something I should be doing to avoid such problems ?


參考解法

方法 1:

You can inspect the dependencies of dependencies using 

mvn dependency:tree ‑Dverbose

In your case it yelds:

+‑ org.codehaus.jackson:jackson‑jaxrs:jar:1.8.3:compile
|  +‑ org.codehaus.jackson:jackson‑core‑asl:jar:1.8.3:compile
|  \‑ org.codehaus.jackson:jackson‑mapper‑asl:jar:1.8.3:compile
|     \‑ (org.codehaus.jackson:jackson‑core‑asl:jar:1.8.3:compile ‑ omitted for duplicate)
\‑ org.springframework.social:spring‑social‑web:jar:1.0.2.RELEASE:compile
   +‑ org.springframework:spring‑webmvc:jar:3.1.0.RELEASE:compile
   |  +‑ org.springframework:spring‑asm:jar:3.1.0.RELEASE:compile
   |  +‑ org.springframework:spring‑beans:jar:3.1.0.RELEASE:compile
   |  |  \‑ (org.springframework:spring‑core:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   |  +‑ org.springframework:spring‑context:jar:3.1.0.RELEASE:compile
   |  |  +‑ org.springframework:spring‑aop:jar:3.1.0.RELEASE:compile
   |  |  |  +‑ (aopalliance:aopalliance:jar:1.0:compile ‑ omitted for duplicate)
   |  |  |  +‑ (org.springframework:spring‑asm:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   |  |  |  +‑ (org.springframework:spring‑beans:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   |  |  |  \‑ (org.springframework:spring‑core:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   |  |  +‑ (org.springframework:spring‑beans:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   |  |  +‑ (org.springframework:spring‑core:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   |  |  +‑ (org.springframework:spring‑expression:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   |  |  \‑ (org.springframework:spring‑asm:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   |  +‑ org.springframework:spring‑context‑support:jar:3.1.0.RELEASE:compile
   |  |  +‑ (org.springframework:spring‑beans:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   |  |  +‑ (org.springframework:spring‑context:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   |  |  \‑ (org.springframework:spring‑core:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   |  +‑ org.springframework:spring‑core:jar:3.1.0.RELEASE:compile
   |  |  +‑ (org.springframework:spring‑asm:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   |  |  \‑ commons‑logging:commons‑logging:jar:1.1.1:compile
   |  +‑ org.springframework:spring‑expression:jar:3.1.0.RELEASE:compile
   |  |  \‑ (org.springframework:spring‑core:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   |  \‑ (org.springframework:spring‑web:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   +‑ javax.inject:javax.inject:jar:1:compile
   +‑ org.springframework:spring‑web:jar:3.1.0.RELEASE:compile
   |  +‑ aopalliance:aopalliance:jar:1.0:compile
   |  +‑ (org.springframework:spring‑beans:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   |  +‑ (org.springframework:spring‑context:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   |  \‑ (org.springframework:spring‑core:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)
   \‑ org.springframework.social:spring‑social‑core:jar:1.0.2.RELEASE:compile
      \‑ (org.springframework:spring‑web:jar:3.1.0.RELEASE:compile ‑ omitted for duplicate)

And as far as I see, it's not spring‑social‑web that includes jackson‑mapper‑asl

方法 2:

You can tell Maven to ignore transitive dependencies using <exclusions> section:

<dependency>
    <groupId>org.springframework.social</groupId>
    <artifactId>spring‑social‑web</artifactId>
    <version>1.0.2.RELEASE</version>
    <exclusions>
        <exclusion>
            <artifactId>org.codehaus.jackson</artifactId>
            <groupId>jackson‑mapper‑asl</groupId>
        </exclusion>
    </exclusions>
</dependency>

With this definition Maven will use only dependency that you defined earlier (1.8.3 version). But be aware that sometimes this can lead to other problems, for example spring‑social‑web may use features that do not exist in 1.8.3 version.

(by NimChimpskyrzymekhoaz)

參考文件

  1. Including a different version of a library, in a maven dependency totally broke my build (CC BY‑SA 3.0/4.0)

#versioning #maven #jackson #spring-social






相關問題

AndroidManifest.xml 文件 <manifest> versionCode 屬性 (AndroidManifest.xml file <manifest> versionCode attribute)

grails 插件兼容性 (grails plugins compatibility)

Debug Unit Test bằng cách sử dụng Resharper 7 cho MBUnit ném ra một ngoại lệ (Debug Unit Tests using Resharper 7 for MBUnit throws an exception)

在 Maven 依賴項中包含不同版本的庫,完全破壞了我的構建 (Including a different version of a library, in a maven dependency totally broke my build)

Servicestack nuget 版本控制 (Servicestack nuget versioning)

如何從共享庫中獲取版本信息到 Android 清單中? (How to get version info from a shared library into the Android manifest?)

我可以在 Visual Studio 中為解決方案設置通用的 major.minor.release (Can I set a general major.minor.release for a solution in Visual Studio)

跨版本的 PowerShell 安裝文件夾和腳本文件擴展名 (PowerShell installation folder and script filename extension across versions)

嚴格版本化的 WCF 服務命名空間是否應該對合同是唯一的? (Should strictly versioned WCF service namespaces be unique to the contract?)

為不同版本的 3rd 方庫設計實用程序 (Design of utilities for diffrent versions of 3rd party library)

如何檢索顯示上游狀態的 git 版本信息 (How do I retrieve git version info showing upstream state)

帶有紗線漿果的 CLI 凹凸版本號 (CLI bump version number with yarn berry)







留言討論