Maven

4.5.3 依赖的原则:解决jar包冲突

  • 路径最短者优先
  • 路径相同时先声明者优先

 

这里“声明”的先后顺序指的是dependency标签配置的先后顺序。

 

      4.5.4 依赖的排除

  • 有的时候为了确保程序正确可以将有可能重复的间接依赖排除。请看如下的例子:

假设当前工程为public,直接依赖environment。

environment依赖commons-logging的1.1.1对于public来说是间接依赖。

当前工程public直接依赖commons-logging的1.1.2

加入exclusions配置后可以在依赖environment的时候排除版本为1.1.1的commons-logging的间 接依赖

<dependency>

    <groupId>com.atguigu.maven</groupId>

    <artifactId>Environment</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <!-- 依赖排除 -->

    <exclusions>

       <exclusion>

           <groupId>commons-logging</groupId>

           <artifactId>commons-logging</artifactId>

       </exclusion>

    </exclusions>

</dependency>

<dependency>

    <groupId>commons-logging</groupId>

    <artifactId>commons-logging</artifactId>

    <version>1.1.2</version>

</dependency>

 

       4.5.5 统一管理目标jar包的版本

以对Spring的jar包依赖为例:Spring的每一个版本中都包含spring-core、spring-context等jar包。我们应该导入版本一致的Spring jar包,而不是使用4.0.0的spring-core的同时使用4.1.1的spring-context。

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-core</artifactId>

    <version>4.0.0.RELEASE</version>

</dependency>

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-context</artifactId>

    <version>4.0.0.RELEASE</version>

</dependency>

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-jdbc</artifactId>

    <version>4.0.0.RELEASE</version>

</dependency>

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-orm</artifactId>

    <version>4.0.0.RELEASE</version>

</dependency>

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-web</artifactId>

    <version>4.0.0.RELEASE</version>

</dependency>

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-webmvc</artifactId>

    <version>4.0.0.RELEASE</version>

</dependency>

问题是如果我们想要将这些jar包的版本统一升级为4.1.1,是不是要手动一个个修改呢?显然,我们有统一配置的方式:

<properties>

    <spring.version>4.1.1.RELEASE</spring.version>

</properties>

……

       <dependency>

           <groupId>org.springframework</groupId>

           <artifactId>spring-core</artifactId>

           <version>${spring.version}</version>

       </dependency>

       <dependency>

           <groupId>org.springframework</groupId>

           <artifactId>spring-context</artifactId>

           <version>${spring.version}</version>

       </dependency>

       <dependency>

           <groupId>org.springframework</groupId>

           <artifactId>spring-jdbc</artifactId>

           <version>${spring.version}</version>

       </dependency>

       <dependency>

           <groupId>org.springframework</groupId>

           <artifactId>spring-orm</artifactId>

           <version>${spring.version}</version>

       </dependency>

       <dependency>

           <groupId>org.springframework</groupId>

           <artifactId>spring-web</artifactId>

           <version>${spring.version}</version>

       </dependency>

       <dependency>

           <groupId>org.springframework</groupId>

           <artifactId>spring-webmvc</artifactId>

           <version>${spring.version}</version>

       </dependency>

这样一来,进行版本调整的时候只改一改地方就行了。