maven降世
maven学习(很不错呦)
https://www.imooc.com/learn/443
maven定义
maven是基于pom的项目管理和构建工具。
重点: pom文件中的标签 以及maven常用构建命令
maven环境搭建
1. 基于jdk
2. 去官网下载
- 去https://maven.apache.org/download.cgi 下载压缩包 解压
- 在conf/settings中配置阿里云镜像 并配置本地仓库
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
3. 仓库
用于存储jar包
- 本地仓库
- 远程仓库
4. 镜像
远程仓库的副本 安装在了国内,更加稳定,下载迅速
如阿里云镜像
maven的固定目录结构
项目--
|
|
|-- src
| |
| |-----main
| | |
| | |----java 放一些java代码
| | |
| | |----resources 放一些资源文件
| |
| |-----test
| |
| |----java
| |
| |----resources
|
|--pom.xml
maven生命周期
- clean 清理项目 pre-clean clean post-clean
- default 构建项目 compile test package install deploy
- site 生成项目站点 pre-site site post-site site-deploy
三个生命周期相互独立,每个生命周期又包含一些阶段,各个阶段是有顺序的,后面的阶段依赖前面的阶段,执行后面的阶段,前面的阶段按顺序执行
项目完整的构建过程: 清理 编译 测试 打包 集成测试 验证 部署
生命周期是抽象概念,具体maven如何编译,测试,打包是通过maven插件来完成的 如: maven-compile-plugin maven-test-plugin等
通过pom对项目进行管理
-
pom 中配置本项目的 groupId artifactId version 这是这个项目的唯一标识,叫为坐标
-
pom中的标签:
modelVersion: pom的版本 groupId: 反写的公司网址+项目名 artifactId:项目名+模块名 version: 主版本+分支版本+小版本+ (snapshot 快照 release稳定 GA正式发布 beta公测 alpha内部测试) packaging: jar|war|zip|pom 默认jar dependencies dependency 引入的依赖(jar) dependenciesManagement 依赖管理() build plugins plugin parent 子模块继承父模块 maven单继承, 多继承用dependenciesManagement 的scope为import modules module 为了对模块进行统一的编译 打包 install
依赖范围 scope
依赖传递 默认依赖是具有传递性的 如果想排除传递性
<dependency>
<exclusions>
<exclusion>
<groupId>...</groupId>
<artifactId>...</artifactId>
</exclusion>
...
</exclusions>
</dependency>
依赖聚合: 一次性将多个项目打包安装到本地仓库 modules的方式
依赖继承: 多个项目的依赖提取公共项放到父项目中 父:dependenciesManagement 子: parent dependencies dependency
依赖冲突: A --> B --> C BC都有同样的jar包,A会先用B的 如果A到B和到C的距离一样,谁在前面先用谁 1. 短路优先 2.位置优先
常用命令:
清理项目
mvn clean
构建项目
mvn compile
mvn test
mvn package
mvn install
构建骨架: mvn archetype:generate
吊命令
mvn -Dmaven.test.skip=true -U clean install
疑问:
1. 为什么maven要基于jdk?
2. 如果没有编辑器,我该如何考虑java项目?
3. mvn install的时候本地仓库文件不更新? 更新
4. mvn install 打成的jar包里面会包含项目使用的那些jar包? 会包含