为什么要使用Maven
- 添加第三方jar包,使用Maven后,jar包没必要复制到lib文件下了,只需要给一个坐标就行
- 解决jar包之间的依赖关系,Maven会自动将当前jar包依赖的包引入
- 处理jar包的冲突,Maven中内置了两条依赖原则:最短路径者优先和先声明者优先,防止出现jar包冲突
- 获取第三方jar包,建立父工程
- 实现项目的分布式部署,多个模块之间的依赖关系,
Maven是什么
一个自动化构建工具
Maven的核心概念
- POM:项目对象模型。将Java工程的相关信息封装为对象作为便于操作和管理的模型。Maven工程的核心配置。可以说学习Maven就是学习pom.xml文件中的配置。
- 约定的目录结构:现在JavaEE开发领域普遍认同一个观点:约定>配置>编码。意思就是能用配置解决的问题就不编码,能基于约定的就不进行配置。在idea中自己生成了其实
- 坐标
使用如下三个向量在Maven的仓库中唯一的确定一个Maven工程。
- [1]groupId:公司或组织的域名倒序+当前项目名称
- [2]artifactId:当前项目的模块名称
- [3]version:当前模块的版本
- 依赖,当A jar包需要用到B jar包中的类时,我们就说A对B有依赖。例如:commons-fileupload-1.3.jar依赖于commons-io-2.0.1.jar。python到处是依赖
- 依赖的范围
-- 只有依赖范围时可以访问
-- 路径最短者优先,a-->b-->c ,b和c都依赖一个包的不同版本,此时最短路径优先
-- 这里“声明”的先后顺序指的是dependency标签配置的先后顺序。
- compile:主程序,测试程序都可以
- test:在主程序中不能用
- provided: 主程序和测试程序都可以用,但是在服务器上有可以不被使用
- 依赖的传递性
- 仓库,本地仓库和远程仓库
- 生命周期:
- 插件:具体任务由插件完成
继承
解决非间接依赖的问题
创建父工程--》在子工程中引用父工程
// 父工程
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
//子项目
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
聚合
将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后也需要逐个手动进行clean操作。而使用了聚合之后就可以批量进行Maven工程的安装、清理工作。
<modules>
<module>../Hello</module>
<module>../HelloFriend</module>
<module>../MakeFriends</module>
</modules>