1.POM
1.含义Project Object Model 项目对象模型
2.pom.xml对于maven工程时核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置。
2.坐标
1.数学坐标:平面中用x,y两个向量定位任意的一个点,空间中用x,y,z定位任意的一个点
2.maven中的坐标:
(1)groupid:公司或者组织域名倒叙+项目名<groupId>com.mycompany.app</groupId>
(2)artifactid:模块名<artifactId>my-app</artifactId>
(3)version:版本<version>1.0.0</version>
3. 仓库
1.仓库的分类
【1】本地仓库:当前电脑上的部署的仓库目录,为当前电脑所有的maven工程服务。
【2】远程仓库:
(1)私服:搭建在局域网环境中,为局域网范围内的所有maven工程服务。
(2)中央仓库:搭建在internet上,为全世界的maven工程服务
(3)中央仓库镜像: 为了分担中央仓库的流量,提升用户的访问速度。
2.仓库中保存的内容
【1】maven自身所需要的插件
【2】第三方的框架或工具的jar包
【3】我们自己开发的maven工程
4.依赖
1.maven的解析依赖信息时会到本地仓库中查找被依赖的jar包
对于我们自己开发的maven工程,使用mvn install命令安装后就可以进入仓库了。
2.依赖的范围
【1】compile范围的依赖
(1)对主程序是否有效:有效
(2)对测试程序是否有效:有效
(3)是否参与打包:参与
【1】test范围的依赖
(1)对主程序是否有效:无效
(2)对测试程序是否有效:有效
(3)是否参与打包:不参与
【1】provided范围的依赖
(1)对主程序是否有效:有效
(2)对测试程序是否有效:有效
(3)是否参与打包:不参与
(4)是否参与打包:不参与
3.依赖的传递性
情景:helloFriend项目设置了依赖,如图。hello项目中没有设置依赖,但是也会将jar包传递给hello项目。
【1】好处:可以传递的依赖不必要在每个模块工程中都重复声明,在最下面的工程中依赖一次就可以了。
【2】注意:没有设置compile范围的依赖不能传递。
4.依赖的排除
情景:
依赖排除的设置:
在需要排除jar包的当前工程中设置,只需要groupId和artifactId。
可以从此处视图选中依赖排除的jar包,右键选中Open POM,可以快速查看groupId和artifactId。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.0.RELEASE</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
5.依赖传递时,依赖的原则
【1】作用:解决模块工程之间的jar包冲突
【2】情景1:hello和helloFirind依赖的jar包版本不同,makefriends会根据路径优先原则选择jar包。
【3】情景2:路径相同时,makeFriends会根据先声明者优先,即makeFriends的pom.xml中dependency标签声明的顺序。
6.统一管理依赖的版本号
情景:将spring的版本升级为4.1.1
设置方法:
【1】使用properties标签内使用自定义标签统一生成版本号
<properties>
<com.spring.version>4.1.1.RELEASE</com.spring.version>
</properties>
【2】在需要统一版本号的位置上使用${自定义标签名}引用版本号。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${com.spring.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
5.生命周期
1.各个构建的环节执行的顺序:不能打乱顺序,必须按照既定的顺序执行。
2.maven的核心程序中定义了抽象的生命周期,生命周期中的各个截断的具体任务是由插件来完成的
3.maven核心程序为了更好的实现自动化构建,无论执行生命周期中哪一个阶段,都是从生命周期最开始的位置执行。比如执行打包,从最开始的地方执行到打包。
4.插件和目标
【1】生命周期的各个阶段仅仅定义了要执行的任务是什么
【2】各个阶段和插件的目标对应
【3】相似的目标由特定的插件完成
生命周期阶段 | 插件目标 | 插件 |
---|---|---|
compile | compile | maven-compiler-plugin |
test-compile | testcompile | maven-compiler-plugin |
【4】可以将目标看作调用插件功能的命令