标题:maven学习
学习内容:
1、Maven与构建的概念
2、Maven约定的目录结构说明以及常用Maven命令
3、POM和坐标
4、仓库
5、依赖
6、生命周期,插件,目标
7、继承
内容详情:
1、Maven与构建的概念
Maven
Maven是一款服务于Java平台的自动化构建工具。
查找依赖的网站
构建
以“Java源文件”、“框架配置文件”、“JSP”、"HTML”、“图片”等资源为“原材料”,去“生产”一个可以运行的项目的过程。
构建过程中的各个环节
清理︰将以前编译得到的旧的class字节码文件删除,为下一次编译做准备
编译∶将Java源程序编程成class字节码文件
测试∶自动测试,自动调用junit程序
报告∶测试程序执行的结果
打包:动态Web工程打war包,Java工程打jar包
安装:Maven特定的概念——将打包得到的文件复制到“仓库”中的指定位置
部署︰将动态Web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行
补充:
一个BS项目最终运行的并不是动态Web工程本身,而是这个动态Web工程“编译的结果"
开发过程中,所有的路径或配置文件中配置的类路径等都是以编译结果的目录结构为标准的。
2、 Maven约定的目录结构说明以及常用Maven命令
约定的目录结构
根目录∶工程名
src目录∶源码
pom.xml文件:Maven工程的核心配置文件
main目录∶存放主程序
test目录∶存放测试程序
java目录∶存放Java源文件
resources目录∶存放框架或其他工具的配置文件
为什么要遵守约定的目录结构呢?
Maven要负责我们这个项目的自动化构建,以编译为例,Maven要想自动进行编译,那么它必须知道Java源文件保存在哪里。
如果我们自己自定义的东西想要让框架或工具知道
以配置的方式明确告诉框架
遵守框架内部已经存在的约定
常用Maven命令
mvn clean:清理
mvn compile:编译主程序
mvn test-compile:编译测试程序[
mvn test:执行测试
mvn package :打包
注意∶执行与构建过程相关的Maven命令,必须进入pom.xml所在的目录。
3、 POM和坐标
POM:Project Object Model项目对象模型
主要体现
pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置。
重要程度相当于web.xml对于动态Web工程
Maven的坐标
使用下面三个向量在仓库中唯一定位一个Maven工程
[1]groupid :公司或组织域名倒序+项目名
<groupid*>com.atguigu.maven</groupid*>
[2]artifactid:模块名
<artifactid*>Hello</artifactid*>
[3]version :版本
<version*>1.0.0</version*>
括号后面是没有*的,为了让这个编辑器能体现出标签,加的,实际上没有
Maven工程的坐标与仓库中路径的对应关系
<groupId*>org.springframework</groupld*>
<artifactId*>spring-core</artifactId*>
<version*>4.0.0.RELEASE</version*>
org/springframework/spring-core/4.0.0.RELEASE/spring-core4.0.0.RELEASE.jar
4、 仓库
仓库的分类
本地仓库:
当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务
远程仓库:
私服︰搭建在局域网环境中,为局域网范围内的所有Maven工程服务
中央仓库∶架设在Internet上,为全世界所有Maven工程服务
中央仓库镜像︰为了分担中央仓库的流量,提升用户访问速度
仓库中保存的内容:Maven工程
Maven自身所需要的插件
第三方框架或工具的jar包
我们自己开发的Maven工程
5、依赖
Maven解析依赖信息时会到本地仓库中查找被依赖的jar包。
对于我们自己开发的Maven工程,使用mvn install命令安装后就可以进入仓库。
依赖的范围
compile范围依赖
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:参与
test范围依赖
对主程序是否有效:无效
对测试程序是否有效:有效
是否参与打包:不参与
provided范围依赖
对主程序是否有效:有效
对测试程序是否有效∶有效
是否参与打包:不参与
依赖的传递性
在其它模块声明的依赖,这个模块里也有。
好处︰可以传递的依赖不必在每个模块工程中都重复声明
注意:非compile范围的依赖不能传递。
依赖的排除
在需要排除的依赖里面添加这个
依赖的原则
6、 生命周期,插件,目标
生命周期
各个构建环节执行的顺序∶不能打乱顺序,必须按照既定的正确顺序来执行。
Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
Maven核心程序为了更好的实现自动化构建,按照这一的特点执行生命周期中的各个阶段︰不论现在要执行生命周期中的哪一个阶段,都是从这个生命周期最初的位置开始执行。
插件和目标
7、继承
现状
Hello依赖的junit : 4.0
HelloFriend依赖的junit : 4.0
MakeFriends依赖的junit :4.9
由于test范围的依赖不能传递,所以必然会分散在各个模块工程中,很容易造成版本不一致。
需求:
统一管理各个模块工程中对junit依赖的版本
解决思路︰
将junit依赖统一提取到“父”工程中,在子工程中声明junit依赖时不指定版本,以父工程中统一设定的为准。同时也便于修改。
操作步骤
[1]创建一个Maven工程作为父工程。注意:打包的方式pom
[2]在子工程中声明对父工程的引用
[3]将子工程的坐标中与父工程坐标中重复的内容删除
[4]在父工程中统一junit的依赖
[5]在子工程中删除junit依赖的版本号部分