美文网首页JAVA
黑猴子的家:Maven Jar 包依赖顺序

黑猴子的家:Maven Jar 包依赖顺序

作者: 黑猴子的家 | 来源:发表于2018-10-25 22:10 被阅读26次

使用maven的程序员都会遇到一个问题,那就是maven依赖冲突的问题,这会导致ClassNotFound或者MethodNotFound这样的异常,其实只要明白maven依赖的根本性的原则就不怕这样的问题了

1、maven依赖原则

(1)间接依赖路径最短优先
一个项目test依赖了a和b两个jar包。其中a-b-c1.0 , d-e-f-c1.1 。由于c1.0路径最短,所以项目test最后使用的是c1.0。

(2)pom文件中申明顺序优先
有人就问了如果 a-b-c1.0 , d-e-c1.1 这样路径都一样怎么办?其实maven的作者也没那么傻,会以在pom文件中申明的顺序那选,如果pom文件中先申明了d再申明了a,test项目最后依赖的会是c1.1
所以maven依赖原则总结起来就两条:路径最短,申明顺序其次

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.14</version>
</dependency>

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

2、如何解决Jar冲突

方法一

遇到冲突的时候第一步要找到maven加载的到时是什么版本的jar包。通过mvn dependency:tree查看依赖树

mvn dependency:tree


[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ web-hsf ---
[INFO] com.lubby:web-hsf:war:0.0.1-SNAPSHOT
[INFO] +- org.apache.geronimo.specs:geronimo-servlet_3.0_spec:jar:1.0:compile
[INFO] +- org.springframework:spring:jar:2.5.6:compile
[INFO] |  \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] +- com.taobao.hsf:hsf.dubbo.schema:jar:2.1.1.1:provided
[INFO] +- com.taobao.hsf:hsf.service.dubbo:jar:2.0.1.9:provided
[INFO] |  +- com.taobao.hsf:hsf.services:jar:2.0.1.9:provided
[INFO] |  |  +- org.slf4j:slf4j-api:jar:1.7.2:provided
[INFO] |  |  +- groovy:groovy-all:jar:1.1-rc-1:provided
[INFO] |  |  \- com.taobao.noah:noah-log:jar:0.0.1-SNAPSHOT:provided
[INFO] |  \- com.taobao.hsf:hsf.app.spring:jar:2.0.1.9:provided
[INFO] |     +- org.slf4j:slf4j-log4j12:jar:1.7.2:provided
[INFO] |     +- log4j:log4j:jar:1.2.17:provided
[INFO] |     +- commons-cli:commons-cli:jar:1.0:provided
[INFO] +- com.taobao.hsf:hsf-standalone:jar:2.0.4-SNAPSHOT:provided
[INFO] |  \- javax.servlet:servlet-api:jar:2.5:provided
[INFO] \- com.ali.unit.rule:unitrouter:jar:1.0.0:provided
[INFO]    \- com.taobao.diamond:diamond-client:jar:3.6.0:provided
[INFO]       \- com.taobao.diamond:diamond-utils:jar:3.1.2:provided
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.407s
[INFO] Finished at: Thu May 12 20:20:00 CST 2018
[INFO] Final Memory: 9M/265M
[INFO] ------------------------------------------------------------------------

遇到冲突的时候,通过maven的依赖原则,来调整坐标在pom文件的申明顺序是最好的办法。

方法二
依赖设置为全局使用

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

<dependency>
    <groupId>com.bosssoft.platform</groupId>
    <artifactId>jobcenter-core</artifactId>
    <version>1.8.0-SNAPSHOT</version>
    <scope>compile</scope>
</dependency>

3、如何隔离一个Jar包 ?

方法一

很常用的exclusion来隔离jar包。

<exclusions>
    <exclusion>
        <groupId>com.ibm.icu</groupId>
        <artifactId>icu4j</artifactId>
    </exclusion>
</exclusions>

方法二

这是一个不常用的方法,就是创建一个空包。
空包的坐标和你需要隔离的Jar包坐标一样,deploy的公司的私服上面。项目中这个空包申明在pom文件靠前的地方,这样依据maven依赖原则,这个空包会优先被使用,后面所有无论是直接依赖还是间接依赖的相同坐标的jar包都不会被使用了。
空包比exclusion的好处就是不用在所有间接依赖的地方去exclusion。

相关文章

  • 黑猴子的家:Maven Jar 包依赖顺序

    使用maven的程序员都会遇到一个问题,那就是maven依赖冲突的问题,这会导致ClassNotFound或者Me...

  • 下载maven依赖到指定目录

    1 场景 将maven依赖jar包和依赖jar包拷贝到指定目录 2 方案 使用maven插件maven-depen...

  • Maven中依赖冲突解决方案

    在使用Maven中我们导入jar包坐标时会产生依赖传递,而依赖传递难免会发生jar包间的依赖冲突,解决jar包冲突...

  • Maven&Intellij IDEA打jar包以及创建scal

    1.Maven 1.1 Maven依赖: 进入这个网址查jar包依赖http://mvnrepository.co...

  • Maven

    @Maven POM 详解 使用maven命令来分析jar包之间的依赖关系

  • maven

    maven 管理jar包的工具,可以管理依赖也可以把自己的软件打成jar包提供他人。编译、测试、打包。maven的...

  • Maven 依赖管理

    管理包依赖是 Maven 核心功能之一,下面通过如何引入 jar 包;如何解析 jar 包依赖;包冲突是如何产生;...

  • Maven:手动添加第三方包到本地pom

    手动添加本地jar包至maven项目 这周在使用maven创建HiveUDF工程时,依赖的一个jar包是本地的,在...

  • cannot be read or is not a valid

    使用maven依赖包这个错,感觉是个bug,jar包明明没有问题。解决方案:删掉jar,然后重新下载依赖。

  • maven打包

    spring-boot-maven-plugin插件会打Jar包会引入依赖包 可以打成直接运行的Jar包 mave...

网友评论

    本文标题:黑猴子的家:Maven Jar 包依赖顺序

    本文链接:https://www.haomeiwen.com/subject/etkhtqtx.html