maven高级之jar包冲突、标签

1、maven基础

  • maven是一个项目管理工具。
依赖管理
  • maven对项目中的jar包的管理过程,传统工程我们直接把jarb包放置在项目中。
  • maven工程真正的jarb包放置在仓库中,项目中只用放置jar包的坐标。
仓库的种类
  • 本地仓库:在我们本机上的maven仓库。
  • 远程仓库【私服】:一般是公司的仓库。
  • 中央仓库:类似于阿里源或者https://mvnrepository.com/。
仓库之间的关系

当我们启动一个maven工程时,maven工程会通过pom文件中jar包的坐标去本地仓库找对应的jar包下载
默认情况下,如果本地仓库没有对应的jar包,maven工程会自动去中央仓库下载jar包到本地仓库。
在公司中,如果本地没有对应的jar包,会先从私服下载jar包。
如果私服中没有jar包,可以从中央仓库下载,也可以从本地上传。

maven命令
  • 一键构建:maven自身集成了tomcat插件,可以对项目j进行编译、测试、打包、安装发布等操作。
  • maven常用命令:clean清理、compile编译、test测试、package打包、install安装、deploy打包上传到私服。
  • maven三套生命周期:清理生命周期、默认生命周期、站点生命周期。
修改web.xml
  • 我们在IDEA或者eclipse创建一个maven工程后,这个工程的web.xml是需要我们修改的,这个并不符合我们原本的项目,我们需要需要添加一些约束。
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
    <display-name>Archetype Created Web Application</display-name>
</web-app>

2、解决maven导入jar包冲突

直接依赖和传递依赖
  • 直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包。
  • 传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中去。
  • 这里同时引入了两个包,但是这个包里有一个传递依赖spring-bean,它的版本跟直接依赖包是相同的,也就说有两个spring-bean依赖包,一个是5.0.2.RELEASE,另一个是4.3.7.RELEASE。那么这样就产生了冲突,究竟是哪一个导入了项目呢。还是都导入了项目?
<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency> 
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>4.3.7.RELEASE</version>
  </dependency>
</dependencies>

在这里插入图片描述

  • 大家可以看看项目存在的包:项目中引入的是5.0.2.RELEASE版本的。为什么呢?
解决方法:
第一声明优先原则
  • 哪个jar包的坐标靠上的位置,这个jar包就是先声明的。先声明的jar包坐标下的依赖包,可以优先进入项目 。
通过直接依赖
  • 直接引入spring-bean的jar包。直接依赖要比传递依赖的优先级高。
<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>4.3.7.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.1.5.RELEASE</version>
  </dependency>
</dependencies>

在这里插入图片描述

直接排除法(工作中常用)
  • 当我们要排除某一个jar包下的依赖包,在配置<exclusion>时,内部可以不用写版本号。默认版本号和直接依赖包是一样的。
<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency>
  
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>4.3.7.RELEASE</version>
    <exclusions>
      <exclusion>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
      </exclusion>
    </exclusions>
  </dependency>

在这里插入图片描述

3、pom.xml内的标签

添加tomcat插件
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.tomcat.maven</groupId>
      <artifactId>tomcat7-maven-plugin</artifactId>
      <version>2.2</version>
    </plugin>
  </plugins>
</build>
锁定jar包版本(只是锁定,不是引入)
  • maven工程是可以分父子依赖关系的。凡是依赖别的项目后,拿到别的项目的依赖包,都属于传递依赖。
  • 比如:当前A项目,被B项目所依赖,那么我们A项目中所有 jar包都会传递B项目中。
    B项目开发者,如果再在B项目中导入一套ssm框架的jar包,对于B项目是直接依赖。
    那么直接依赖的jar包,就会把我们A项目传递过去的jar包覆盖掉。
  • 为了防止以上情况的出现,我们可以把A项目中主要的jar包的坐标锁住,那么其他依赖该项目的项目中,
    即便是有同名jar包直接依赖,也无法覆盖 。
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId></groupId>
      <artifactId></artifactId>
    </dependency>
  </dependencies>
</dependencyManagement>
添加依赖
  • 在这里添加所需要依赖的jar包的坐标,然后maven就会去本地仓库获取。
<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.2.RELEASE</version>
  </dependency> 
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>4.3.7.RELEASE</version>
  </dependency>
</dependencies>
统一管理jar包版本
<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
  <spring.version>5.0.2.RELEASE</spring.version>
  <slf4j.version>1.6.6</slf4j.version>
  <log4j.version>1.2.12</log4j.version>
  <mysql.version>5.1.6</mysql.version>
  <mybatis.version>3.4.5</mybatis.version>
</properties>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值