maven如今是java开发中不可或缺的管理一环,发一些本人的学习笔记,对研究过的笔友希望有些帮助
![20d08778a3287838e9ed8ce09500d71b.png](https://i-blog.csdnimg.cn/blog_migrate/afb25d474dfe298d62f907f50dbb2535.jpeg)
积累来源于灵魂触碰
1.maven的一些概念
maven是Apache的开源项目,是项目管理工具,主要服务于Java平台的项目构建,依赖管理和项目信息管理
2.maven的一些好处
maven可以将现有应用分模块处理,查找方便
jar包可以不用上传SVN,减轻svn的压力
Debug时可以自动跟踪源码、
3.pom.xml是maven项目的核心。例如ant通过build.xml执行构建任务,maven通过pom.xml来执行构建任务和信息
4.maven坐标的含义
project 根节点,在里面定义命名空间和xsd元素
groupId实际项目Id
artifactId项目模块Id
version定义项目目前的版本
packaking 项目的打包方式,默认是jar,web项目是war
dependencies 元素地下就是加依赖包的地方,每个dependency都是一个依赖包,依赖包也就是在dependency里面定义各个依赖包的坐标,这样maven就会从网上下载依赖包到本地仓库,里面其它几个元素的作用
type说明依赖的类型
optional标记依赖是否可选
exclusions用来排斥传递依赖
实际项目
模块
版本
依赖类型
依赖范围
依赖是否可选
…
…
5.maven的三套生命周期
clean生命周期
Default生命周期
Site生命周期
6.nexus是当前最流行的maven仓库管理软件
7.maven有一个作用是存放项目所需要的所有jar包,也可以把项目打成jar包或者war包发布到项目上去
8.maven中scope(依赖范围)
在maven的世界中,有很多种classpath,编译classpath,测试classpath,运行classpath,依赖范围就是用来控制依赖与这三种classpath的关系
compile:编译依赖范围。如果没有指定,则默认使用该依赖范围。使用此范围的依赖,在编译,测试,运行着三种classpath都有效。
test:测试依赖范围。使用此范围的依赖,只对测试classpath有效,即只有在测试的代码中才可用。典型例子就是Junit
provided:已提供依赖范围。使用此范围的依赖对于编译和测试都有效,但在运行时无效。典型例子就是servlet-api
runtime:运行时依赖范围。使用此范围的依赖对于测试和运行classpath有效,但在编译主代码是无效。典型例子就是JDBC驱动实现
system:系统依赖范围。对于编译和测试有效,但在运行时无效。使用system范围时,必须通过systemPath元素显示的指定依赖文件的路径(慎用)
import:导入依赖范围
9.maven的目录结构说明
bin:该目录包含了mvn运行的脚本,这些脚本用来配置java命令,准备好classpath和相关java系统属性,然后执行java命令
boot:该目录只有一个文件,这个文件是一个类加器框架,相当于默认的java类加载器,它提供了丰富的语法以方便配置
conf:该目录包含了一个非常重要的文件settings.xml
lib:该目录包含了所有maven运行时需要的java类库
10.maven命令说明
1) mvn clean 表示运行清理操作(会默认把target文件夹中的数据清理掉)
2)mvn clean compile 表示清理之后再编译,代码编译到target文件夹中
3)mvn clean test 表示清理之后再测试
4)mvn clean package 表示清理之后打包
5)mvn clean install 表示清理之后安装,会将打好的包安装到本地仓库中,以便其它的项目可以调用
6)mvn clean deploy 表示清理之后发布
11.依赖具有传递性,比如A->B,B->C,那么A间接的依赖于C
12.maven里面对于依赖性传递有以下几个规则
1)最短路径原则
2)第一声明优先原则
3)可选依赖不会传递
13.本地仓库:是指存在于我们本机的仓库,在我们加入依赖的时候,首先会跑到我们本地仓库去找,如果找不到则会跑到远程仓库中去找;
中央仓库:为供所有本地仓库下载依赖包的一个仓库,它是部署在局域网内的一个仓库;
远程仓库:在中央仓库找不到的依赖包则会跑到远程仓库下载的仓库,它需要互联网来实现依赖包的下载。
14.聚合:一次性对所有模块进行编译,打包,发布;packaging的类型为pom,moudle的值是一个以当前pom为主目录的相对路径
例: 4.0.0
org.pango.user
user-parent
0.0.1-SNAPSHOT
pom
../user-core
../user-log
../user-dao
15.继承:maven中的继承机制类似于java,在一个父级别Maven的pom.xml文件中定义了相关的常量,依赖,插件等等配置后,实际项目模块就可以继承次父项目的pom文件,重复的项不必显示的再声明一遍了,相当于父maven项目是一个模板,通过parent元素来继承父项目中的包
org.pango.user
user-parent
0.0.1-SNAPSHOT
../user-parent/pom.xml
16.继承和聚合的区别和联系
区别:
1.对于聚合模块来说,它知道有哪些聚合的模块,但那些被聚合的模块不知道这个聚合模块的存在
2.对于继承关系的父pom来说,它不知道有哪些子模块要继承它,但那些子模块必须知道自己的父pom是谁
共同点:
1.聚合pom与继承关系中的父pom的packaging都是pom
2.聚合模块与继承关系中的父模块除了POM之外都没有实际的内容
17.nexus是一个对软件管理非常好的工具,可以帮助将开发的组件与其它开发者或终端用户进行共享,nexus可以非常简单的维护本地仓库以及访问外部的仓库,可以很好衔接本地仓库和外部仓库的关系,来达到软件项目的分享
18.私服(nexus)中的repositories就是指仓库,它包含三种类型仓库,分别为host仓库,proxy仓库,group仓库
host仓库:内部项目的发布仓库
proxy仓库:从远程仓库中央仓库中寻找数据的仓库
group仓库:组仓库用来方便开发人员进行设置的仓库
19.maven的生命周期包含项目的清理,初始化,编译,测试,打包,继承测试,验证,部署,站点生成等几乎所有的过程,而且maven的生命周期极其灵活,它的生命周期的每个阶段都是通过插件来实现的
20.maven有三套相互独立的生命周期,这三套生命周期分别是:
1.Clean lifestyle 在进行真正的构建之前进行一些清理工作
2.Default lifestyle 构建的核心部分,编译,测试,打包,部署等等
3.Site liefstyle 生成项目报告,站点,发布站点
这三套生命周期是相互独立的,可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点,当然你也可以直接运行mvn clean install site运行所有的这三套生命周期
21.clean生命周期的阶段
1.pre-clean 执行一些需要在clean之前完成的操作
2.clean 移除所有上一次构建生成的文件
3.post-clean执行一些需要在clean之后立刻完成的操作
22.site生命周期的各个阶段
1.pre-site执行一些需要在生成站点文档之前完成的工作
2. site 生成项目的站点文档
3.post-site 执行一些需要在生成站点文档完成的工作,并且为部署做准备
4.site-deploy 将生成的站点文档部署到特定的服务器上
23.maven是怎么知道有哪些测试类呢,这是约定大于配置的结果,默认情况下,maven会去src/test/java下面去寻找类,此文件下面的类会需要符合以下的规则:
Test*.java 任何目录以Test开头的类
*Test.java 任何以test结尾的类
*TestCase 任何以testCase结尾的类
24.打包可以在Maven build...里面,通过填写clean package
![436f31f180c0a466c981873b52c03dad.png](https://i-blog.csdnimg.cn/blog_migrate/7ede8ca60e965c009d3ba36d63f11424.jpeg)
心灵朝向院方