Maven是基于项目对象模型(POM)的项目管理工具
/bin目录包含maven运行时的一些脚本
/boot包含类加载器
groupId即是项目的包名
artifactId是模块名,建议使用项目名称
常用命令
mvn -v 查看版本
mvn compile 编译
mvn test 测试
mvn package 打包
mvn clean 删除target目录
mvn install 安装jar包到本地仓库中
打包命名原则:artifactId-version.jar
自动创建目录的两种方式
1、mvn archetype:generate
2、mvn archetype:generate -DgroupId=com.sheepyang.maven04 -DartifactId=maven04-demo -Dversion=1.0.0SNAPSHOT -Dpackage=com.sheepyang.maven04.demo
坐标:构建
仓库:本地仓库、远程仓库
镜像仓库:可以使用国内的镜像仓库
更改仓库位置: 默认存放位置:C:\Users\Administrator\.m2\repository
maven的生命周期和插件
完整的项目构建过程包括:清理、编译、测试、打包、集成测试、验证、部署
maven生命周期:clean 清理项目
pre-clean 执行清理前的工作
clean 清理上次构建生成的所有文件
post-clean 执行清理后的文件
default 构建项目(最核心)
compile、test、package、install
site 生成项目站点
pre-site 生成项目站点前要完成的工作
site 生成项目站点的文档
post-site 生成项目站点后要完成的工作
site-deploy 发布生成的项目站点到服务器上
pom.xml解析
<groupId>反写的公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<!--
第一个0表示大版本号
第二个0表示分支版本号
第三个0表示小版本号
例如:0.0.1
SNAPSHOT快照
ALPHA内部测试
BETA公测
RELEASE稳定版本
GA正式
-->
<version></version>版本
<!--
项目打包方式,默认是jar,可以打包成别的格式,比如:war、zip、pom
-->
<packaging></packaging>包名
<!-- 项目描述名 -->
<name></name>
<!-- 项目地址 -->
<url></url>
<!-- 项目描述 -->
<description></description>
<!-- 开发人员列表 -->
<developers></developers>
<!-- 许可证信息 -->
<licenses></licenses>
<!-- 组织信息 -->
<organization></organization>
<!-- 依赖列表,比较重要。依赖列表下可以包含多个的依赖项 -->
<dependencies>
<!-- 依赖项 -->
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<!-- 依赖类型 -->
<type></type>
<!-- 依赖范围,例如下面的test,如果在主代码中引用,则会报错 -->
<scope>test</scope>
<!-- 分别有两个值true/false,用来设置依赖是否可选,默认是false-->
<optional></optional>
<!-- 排除依赖传递列表,比如a依赖b,b依赖c,a不想依赖c的时候可以使用 -->
<exclusions>
<exclusion></exclusion>
</exclusions>
</dependency>
</dependencies>
<!-- 依赖管理 -->
<dependencyManagement>
<dependencies>
<dependency></dependency>
</dependencies>
</dependencyManagement>
<!-- 对构建的行为提供相应的支持 -->
<build>
<!-- 插件的列表 -->
<plugins>
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>
</plugins>
</build>
<!-- 子模块中plugin对父模块的继承 -->
<parent></parent>
<!-- 可以指定多个模块,聚合编译 -->
<modules></modules>
依赖的范围
<scope></scope>
compile:默认的范围,编译测试运行都有效
provided:在编译和测试时有效
runtime:在测试和运行时有效
test:只在测试时有效
system:在编译和测试时有效,与本机系统相关联,可移植性差
import:导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置
依赖传值
b依赖a,c依赖b,则c自动依赖a,可以用排除依赖取消依赖
见案例
依赖冲突
有重复的依赖,则有以下两种处理方案
1、短路优先,优先解析路径短的
2、先声明先优先,路径长度相同,谁先声明,优先解析谁
聚合和继承
想要将多个项目同时install,可以通过聚合来处理
见案例
使用maven构建web项目