一个项目管理工具,能够帮助你的项目构建以及部署加快.
maven的上下一体
- Maven 简介
- Maven 的安装和配置
- Maven 仓库
- Maven 入门
- Maven 核心概念解析
- Maven 的依赖管理
- Eclipse 中创建 Maven JAVEWEB 项目
- Maven 的继承
- Maven 的聚合
maven简单的说是一个项目集管理工具
一个项目里面包含什么内容,无非是java代码,资源,甚至是相关的一些jar包,如何摆放
多个项目之间是否存在关系,是否需要相互照应,是否能够将项目直接放置在tomcat中,那么这些都需要靠maven来进行操作
maven的简介说明
- 一个普通的web项目需要在lib中引入大量的jar包,maven可以帮助我们添加需要的jar包
- 一个工具包可能需要依赖其它的jar包作为支撑,比如使用log4j的时候需要依靠通用的common-io包,maven可以帮助的项目做依赖jar包
- 一些jar包有着不同的版本,每个项目可能需要的jar包不一样,从哪里来。maven提供了一个中央仓库供大家下载
- 多模块拆分,以前常见使用package的方式进行分层能够解决基本的问题,但随着项目越来越大,那么我们要进行细化,直接使用package分并不够。那么通过我们可以通过maven进行拆分,并且统一进行管理
关于构建 (结构化的建立)(也就是有一种标准式的建立方式)
主要有几个动作:
- clean 清理:删除编译的内容,做好重新编译的准备
- complie 编译:也就是将代码编译为class文件
- test 测试:对项目中的某个模块业务进行测试,以确保的结果的准确性
- report 报告:有测试完毕的情况下,有对应的报告生成
- package 打包:将一个文件或者多个进行jar或者war包打包
- install 安装:将jar包或者war包安装到本地仓库中
- deploy 部署:将war包部署到服务器容器中
自动构建 (CI) 持续集成
上面的动作是非常繁琐的。是否可以通过一个命令一个脚本帮助你做这件事情。这个我们称作为自动构建或者叫做持续集成
maven的安装与配置
- windows配置环境变量(注意:可能需要设置JAVA_HOME变量)
mac中加入 bash_profile (可执行的配置文件)
1 | cat ~/.bash_profile |
使用mvn -v 命令查看maven版本 (验证是否安装成功)
修改使用maven下载jar包存放仓库的位置(路径自行选择)
在config-setting.xml中 更改<localRepository>/Users/Yun/Documents/maven/repo</localRepository>
- 设置镜像仓库(maven默认仓库假设在美国,国内有锁,下载十分缓慢)
1 | <mirror> |
- 后期为了保证项目统一的jdk版本在
中加入(JDK更改即可)
1 | <profile> |
maven仓库的概念
- 本地仓库 (本地maven存放的文件)
- 远程仓库 (来自五湖四海汇集到一起)
- 私服 (开发中,都有自己搭建的私服,其实就是私有仓库)
- 中央仓库和镜像 中央仓库只有一个,镜像是中央仓库的克隆,用于分担中央仓库的压力
maven入门
- eclipse中配置maven路径(默认是自动识别)
- 加载maven配置文件
- 构建一个mavenproject(勾选创建一个简单的maven项目)
目录结构如下:
- 观察一下pom.xml(自行加入junit)
1 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
- 在src/main/java 以及 src/test/java中
1 | public class HelloMaven { |
1 | import static org.junit.Assert.*; |
- 切换到项目根目录下执行
mvn compile (注意观察info)
mvn clean (注意观察info)
mvn test (注意观察info)
会新增一个测试报告
mvn package (注意观察info) (compile->test->package)
Maven 核心概念解析(pom,目录结构,坐标)
pom.xml文件对整体项目文件的管理。认知maven就是认知pom.xml文件
src/main/java
为项目的逻辑代码存放地src/main/resource
为项目资源配置文件,同理测试目录为测试文件与资源的存放地target为compile存放文件的位置
坐标主要的目的一个项目能从maven仓库中找到需要的内容,而这个内容需要有一个标识
1 | <groupId>com.wwj</groupId> |
执行 mvn install (观察info) 相当于打包jar包放置与本地仓库中
路径:
Maven 的依赖管理
- 依赖管理
中有一个标签叫 , scope有3个选项compile,test,provided
- compile 编译 主要为项目主业务代码 从前到后使用
- test 测试 主要提供给测试业务代码 仅仅只在test使用
- provided 可提供的 也就是从编译到测试使用,可以理解为仅仅只在项目中使用,部署后由容易本身提供
- 依赖传递概念
(1). 假如有Maven项目A,项目B依赖A,项目C依赖B。那么我们可以说 C依赖A。也就是说,依赖的关系为:C—>B—>A。 那么我们执行项目C时,会自动把B、A都下载导入到C项目的jar包文件夹中。这就是依赖的传递性。并且C对B的支撑要达到complie级别,A才能够可见到C. 其余级别不支持
(2). 如果C现在不要A (使用exclusion)
1 | <exclusions> |
(3). 依赖冲突:一个项目A,通过不同依赖传递路径依赖于X,若在不同路径下传递过来的X版本不同
- 短路优先 (会选择version2)
A -> B -> C -> X(VERSION=1) 和 A -> D -> X(VERSION=2)
- 声明优先(会选择version2) 在A的声明中 D如果写在E前则D优先
A -> D -> X(VERSION=2) 和 A -> E -> X(VERSION=1)
- 统一版本管理
1 | <properties> |
Eclipse 中创建 Maven JAVEWEB 项目 (勾选简单的maven项目)
项目右键勾选属性:
OK~ 一个web项目构建完成
maven的继承 (多个子项目都需要某些依赖, 就可以把子项目共同的依赖抽取到父项目中,子项目通过继承得到这些依赖)
- 构建父项目(打包方式为pom)
- 父项目使用 dependencyManagement 标签来管理,
optional表示子 pom 无论如何都不能继承(已经失效)
1 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
- 子项目使用父项目的依赖
1 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
9.maven聚合 (将功能模块拆分,最常见的我们整合ssm的时候会将service和dao进行拆分,当然也可以以项目的方式)
maven-parent (Maven Project)
|- maven-son1 (Maven Module)
|- maven-son2 (Maven Module)
|- …
创建父模块(父模块一般承担聚合模块和统一管理依赖的作用,没有实际代码和资源文件) (打包方式为pom.xml)
右键父项目创建子模块module
分别观察到父亲管理那些模块,儿子的父亲是谁
- 父模块做统一管理
1 | <properties> |
- 子模块直接进行依赖
1 | <dependencies> |
- 切换到maven父项目执行mvn install (观察info)