Maven概念
Maven是一种基于项目对象模型(POM)可以通过一小段描述信息(pom.xml)来管理项目的构建、报告和文档的软件项目管理工具。
ps: java 项目的依赖管理,非常方便;
Maven安装
下载maven,配置环境变量,可通过mvn -v来测试maven安装是否成功。
Maven安装文件的目录结构:
bin目录包含mvn的运行脚本,
boot目录包含一个类加载器框架,
conf目录包含配置文件,
lib目录包含所需要的类库
Maven安装时的注意事项:
1、在目录中创建一个maven文件夹(~/.m2/repository),将maven安装文件中的setting.xml(在conf文件夹下)拷贝过来,目的是转移工厂到自己的位置中,默认是我的文档/.m2/repository,修改setting.xml加入自己的路径:
1 | <localResositoty>~/.m2/repository</localResositoty> |
同时将安装文件中的setting.xml也加入此段配置代码。
2、知道中央工厂所在的位置,在lib文件下的maven-model-builder.jar文件中。
maven常用的构建命令:
mvn -v 查看maven版本
mvn compile 编译
mvn test 测试
mvn package 打包
mvn clean 删除maven在target中所生成的字节码文件
mvn install 安装jar包到本地仓库中
创建目录的两种方式:
1、archetype:generate 按照提示进行选择
2、archetype:generate -Dgroup=组织名
-DartifactId=项目名-模块名
-Dversion=版本号
-Dpackage= 代码所在的包名
maven生命周期:clean清理项目、default构建项目、site生成项目站点
在eclipse中创建maven项目
1、下载并正确安装eclipse;
2、在eclipse上成功安装maven插件;
3、成功安装插件后,在eclipse上File/New/Other、选择Maven项目。
maven项目约定好的目录结构:
1 | src resources |
这里解释一下以上文件夹
src/main/java
该文件夹是存放java源码的,发布项目时会将该文件夹下的class文件复制到WEB-INF/classes目录下
src/main/resources
该文件夹一般放置配置文件,如xml,properties文件等,其实也可以放置java文件,只是一种约定罢了,发布项目时该文件夹的文件也会复制到WEB-INF/class中
test中放置测试代码
pom.xml
常用标签概览:
pom.xml是maven项目的核心管理文件,用于项目描述、组织管理、依赖管理、构建管理,其中包含了很多标签。首先概览一下pom.xml中的标签:
1 | <project> |
Maven的依赖
在pom.xml中,使用如下标签配置依赖:
1 | <dependency> |
1 | groupId,必选,实际隶属项目 |
其中scope有六个值:
- compile:默认的范围,编译测试运行都有效
- provided:在编译测试时有效,在运行时没有效
- test:只在测试时有效
- runtime:在测试和运行时有效
- system:与本机系统相关联,可移植性差
- import:导入的范围,它只使用在dependencyManagement中,表示从其它的pom中导入dependency的配置。
依赖具有传递性,如果想取消传递依赖,可以进行依赖排除,使用exclusion标签。
1 | <dependency> |
当依赖有冲突时会采用以下原则:
1、短路优先,优先解析路径短的,
2、先声明先优先,如果路径相同,谁先声明先解析谁。
Maven的聚合和继承
聚合
为了能够使用一条命令就能构建m1和m2两个模块,我们需要建立一个额外的名为m的模块,然后通过该模块构建整个项目的所有模块。m本身也是个Maven项目,它的POM如下:
1 | <project> |
继承
可声明父POM供子POM继承
父模块POM如下:
1 | <project> |
子模块声明继承如下:
1 | <project> |
最后,同样还需要把m-parent加入到聚合模块m中。聚合的POM如下:
1 | <project> |
注意:
- 子模块没有声明groupId和version, 这两个属性继承至父模块。但如果子模块有不同与父模块的 groupId、version ,也可指定;
- 不应该继承artifactId,如果groupId ,version,artifactId 完全继承的话会造成坐标冲突;另外即使使用不同的 groupId或version,同样的 artifactId也容易产生混淆。
- 使用继承后 parent也必须像自模块一样加入到聚合模块中。也就是在在聚合模块的 pom中加入m-parent
Maven插件
未完待续…