maven study
下载bin安装包,解压,配置环境变量
mvn命令:
mvn
-v 查看maven版本
compile 编译
test 测试
package 打包
clean 删除tartget
install 安装jar包到本地仓库中
声明:以下笔记的内容大部分来自于尚硅谷的maven视频课程,花了一天的时间学习完,并做了以下笔记
1.注意:执行与构建过程相关的maven命令,必须进入pom.xml所在的目录。
与构建过程相关:编译、测试、打包...
2.常用命令
mvn clean 清理
mvn compile 编译主程序
mvn test-compile 编译测试程序
mvn test 执行测试
mvn package 打包
关于联网的问题
1.maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作由特定的插件来完成。而插件的本身并不包含在maven的核心程序中。
2.当我们执行的maven命令需要用到某些插件时,maven核心程序会首先到本地仓库中查找。
3.本地仓库的默认位置:【当前用户home目录】.m2\repository
4.maven 核心程序如果在本地仓库中找不到需要的插件,那么会自动连接外网,到中央仓库下载。
5.如果此时无法连接外网,则构建失败。
6.修改默认本地仓库的位置可以让maven核心程序到我们事先准备好的目录下查找插件
①找到maven解压目录\conf\settings.xml
②在settings.xml文件中找到localRepository标签
③将<localRepository>/path/to/local/repo</localRepository>从注释中取出
④将标签内容修改为已经准备好的maven仓库目录
<localRepository>D:/RepoMaven</localRepository>
maven源设置为国内源
<!-- 阿里云仓库 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
POM
1.含义:Project Object Model 项目对象模型
2.pom.xml对于maven工程是核心配置文件,与构建过程相关的一切配置都在这个文件中进行配置,重要程度相当于web.xml对于动态web工程
坐标
maven的坐标
使用下面三个向量在仓库中唯一定位一个maven工程
①groupId:公司或组织域名倒序+项目名
②artifactId:模块名
③version:版本
Maven工程的坐标与仓库中路径的对应关系
仓库
仓库的分类
1.本地仓库:当前电脑部署的仓库目录,为当前电脑上所有maven工程服务
2.远程仓库:
①私服:搭建在局域网中环境中,为局域网范围内的所有Maven工程服务
②中央仓库:架设在internet上,为全世界所有maven工程服务
③中央仓库镜像:为了分担中央仓库的流量,提升用户访问的速度
仓库中保存的内容:maven工程
1.maven自身需要的插件
2.第三方架设或工具的jar包
3.我们自己开发的maven工程
依赖
①maven解析依赖信息时会到本地仓库中查找被依赖的jar包
对于我们自己开发的maven工程,使用install命令安装后就可以进入仓库
②依赖的范围
1.compile
- 对主程序是否有效:有效
- 对测试程序是否有效:有效
- 是否参与打包:参与
- 是否参与部署:参与
典型例子:spring-core
2.test - 对主程序是否有效:无效
- 对测试程序是否有效:有效
- 是否参与打包:不参与
- 是否参与部署:不参与
典型例子:junit
3.provided范围依赖 - 对主程序是否有效:有效
- 对测试程序是否有效:有效
- 是否参与打包:不参与
- 是否参与部署:不参与
典型例子:servlet-api.jar - 典型例子:servlet-api.jar
生命周期
1.各个构建环节执行的顺序:不能打乱顺序,必须按照规定的正确顺序来执行
2.maven核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的
3.maven核心程序为了更好的实现自动化构建,按照这样的特点执行生命周期中的各个阶段:不论现在要执行生命周期的哪一个阶段,都是从这个生命周期最初的位置开始执行
插件和目标
1.生命周期的各个阶段仅仅定义了要执行的任务是什么
2.各个阶段和插件的目标是对应的
3.相似的目标由特定的插件来完成
4.可以将插件目标看做“调用插件功能的命令”
在eclipse中使用maven
①maven插件:eclipse内置
②maven插件的设置
1.installations:指定Maven核心程序的位置,不建议使用插件自带的maven程序,而应该使用我们自己解压的那个
2.user settings:指定解压目录中的conf/settings.xml的位置,进而获取本地仓库的位置
③基本操作
1.创建maven版的java工程
2.创建maven版的web工程
3.执行maven命令
设置eclipse中创建maven工程默认的jdk版本,conf/settings.xml中打开注释并修改版本
<profile>
<id>jdk-1.7</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
如果不该上面的配置,创建maven java工程,会默认是java SE1.5的环境,修改了后就会自动生成相应的版本
创建maven工程时一定要勾选create simple maven project(skip ...)

不然创建quickstart的项目时会发现源码包包含的路径不全

在eclipse中执行maven命令,直接右键pom.xml,run as...
如果需要执行编译,选择mvn build ...

如果在myeclipse中执行maven命令时候,控制台不输出任何日志提示信息,添加一下myeclipse的设置,windows->Java->Installed JREs,选择使用的jdk,edit编辑,在默认虚拟机参数中添加-Dmaven.multiModuleProjectDirectory=$M2_HOME参数

创建java工程packaging选择jar,创建web工程packaging选择war,如果不是myeclipse,而是eclipse,他创建web工程只会生成一个webapps,这时右键项目properties,project facets,取消Dynamic Web Module的勾选应用,然后再勾选上应用OK。然后对话框下方会提示进一步配置参数,点击它,将content directory改成src/main/webapp
myeclipse中创建maven工程的正确打开姿势
依赖【高级】
①依赖的传递性
1.好处:可以传递的依赖不必在每个模块工程中都重复声明,在“最下面”的工程之后依赖一次即可。
2.注意:非compile范围的依赖不能依赖,所以在各个版本工程模块中,如果有需要就得重复声明依赖
②依赖的排除
1.需要设置依赖排除的场合
2.依赖排除的设置方式
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
③依赖的原则
1.作用:解决模块工程之间的jar包冲突问题
2.情景设定1:验证路径最短者优先原则
3.情景设定2:验证路径相同时先声明者优先
先声明指的是dependency标签的声明顺序
4.同意管理依赖的版本
(1)情景举例:比如引入spring4.0.0版本的,那么spring相关的依赖包都用4.0.0版本的
如果需要统一升为4.1.1,怎么办?手动逐一修改不可靠
(2)建议配置方式
i.使用properties标签内使用自定义标签统一声明版本号
ii.在需要统一版本的位置,使用$(自定义标签名)引用声明的版本号
(3)其实properties标签配合自定义标签声明数据的配置并不是只能用于声明依赖的版本号。凡是需要统一声明后引用的场合都可以。
继承
①现状
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的版本号依赖
⑤注意:配置继承后,执行安装命令时要先安装父工程
聚合
①作用:一键安装各个模块工程
②配置方式:在一个总的聚合工程中配置各个参与聚合的模块
③使用方式:在聚合工程的pom.xml上右键->run as->maven install