一、Maven简介
传统开发项目的问题:
- 模块之间关系的管理
- 第三方功能的的管理
- 管理jar包的版本
- 管理jar文件之间的依赖
使用Maven:
- 管理jar文件
- 自动下载jar和相关的文档、源代码
- 管理jar直接的依赖
- 管理jar的版本
- 编译程序
- 测试
- 打包成jar或者war
- 部署项目
构建是项目的构建,构建是面向过程的,就是一些步骤,完成项目代码的编译、测试、运行、打包、部署,maven支持的构建包括有:
- 清理:把之前项目编译的东西删除掉,为新的编译代码做准备
- 编译:源代码编译为执行代码
- 测试:执行测试程序代码
- 报告:生成测试结果的文件,测试通过没有
- 打包:把项目中的所有class文件,配置文件等所有资源放到一个压缩文件中
- 安装:把5中生成的jar,war安装到本机仓库
- 部署:把程序安装好可以执行
二、Maven的核心概念
POM
project object model
maven把一个项目当作一个模型使用
基本信息
- modelVersion:maven模型的版本
- groupId:组织id,一般是公司域名的倒写,或者域名倒写+项目名
- artifactId:项目名称,也是模块名称
- version:项目的版本号,如果项目还在开发中,是不稳定版本,通常在版本后带-SNAPSHOT
- packaging:项目打包的类型,可以使用jar、war等,默认为jar
- dependencies和dependency:依赖
- properties:配置属性
- build:表示与构建相关的配置,例如设置编译插件的jdk版本
- parent:在maven中,如果多个模块都需要生命相同的配置,例如:groupId、version、有相同的依赖,或者相同的组件配置等,也有类似Java的继承机制,用parent生命要继承的父工程的pom配置
10.modules
约定的目录结构
maven项目的目录和文件的位置都是规定的
Hello
|—src
|—|---main
|—|---|—java
|—|---|—resources
|—|---test(单元测试)
|—|---|—java
|—|---|—resources
|—target(编译后生成class文件)
|—pom.xml
坐标
唯一的字符串,用来表示资源的
<groupId></groupId>
<artifactId></artifactId>
<version></version>
依赖管理
管理项目中可以使用的jar文件
仓库管理
资源存放的位置,分本地仓库、远程仓库、私服
私服:在公司内部,在局域网中使用的仓库
使用jar包时,先查本地仓库,再查私服,再查镜像,最后查中央仓库
生命周期
maven工具构建项目的过程
插件和目标
执行maven构建的时候用的工具是插件,就是一些jar文件
常用命令
- mvn clean:清理,会删除原来编译和测试的目录,即target目录,但是已经install到仓库里的包不会删除
- mvn compile:编译主程序
- mvn test-compile:编译测试程序
- mvn test:测试,会生成一个目录surefire-reports,保存测试结果
- mvn package:打包主程序,会编译、编译测试、测试、并且按照pom.xml配置把主程序打包生成jar包或者war包
- mvn install:安装主程序,会把本工程打包,并且按照本工程的坐标保存在本地仓库中
- mvn deploy:部署主程序,会把本工程打包,按照本工程的坐标保存在本地仓库中,并且还会保存到私服仓库中,还会自动把项目部署到web容器中
注意:执行以上命令必须在pom.xml所在目录
插件配置
<build>
<plugins>
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>
</pulgins>
</build>
三、Maven在Idea中的使用
使用模版创建项目
- maven-archetype-quickstart:普通的Java项目
- maven-archetype-webapp:web工程
pom.xml右键reimport,刷新导入
右键文件夹Mark as
四、依赖管理
依赖范围:使用scope表示,值有compile、test、provided,默认是compile,表示构建使用的范围,也就是在maven构建项目中的那些阶段中起作用
compile | test | provided | |
---|---|---|---|
对主程序是否有效 | 是 | 否 | 是 |
对测试程序是否有效 | 是 | 否 | 是 |
是否参与打包 | 是 | 否 | 否 |
是否参与部署 | 是 | 否 | 否 |
五、Maven常用设置
-
属性设置
<properties></properties>
-
自定义全局变量
<properties>
中定义,${}
使用 -
资源插件
默认没有使用 resources 的时候,maven 执行编译代码时,会把 resources 文件中的配置文件拷贝到 target/classes 中,对于 src/main/java 目录下的非 java 文件不处理,不拷贝到 target/classes 目录中
有时程序需要把一些文件放在 src/main/java 中,执行 java 程序时,需要用到 src/main/java 目录中的文件。需要告诉 maven 在
mvn compile
src/main/java 目录下的程序时,需要把文件一同拷贝到 target/classes 目录中,此时就需要在<build>
中加入<resources>