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>