maven核心概念有
- 1约定的目录结构
- 2POM
- 3坐标
- 4仓库
- 5依赖
- 6生命周期/插件/目标
- 7聚合
- 8继承
| spring | 项目名 |
| src目录 | 存放源码 |
| main目录 | 存放主程序 |
| java目录 | 存放Java源文件 |
| resources目录 | 存放配置文件 |
| test目录 | 存放测试程序 |
| pom.xml文件 | Maven的核心配置文件 |
此目录规范了开发结构,提供标准的、统一的项目结构。Eclipse和Idea工程结构不一样,用maven统一结构可以跨开发工具
程序员开发代码普遍认同的观点:约定>配置>编码
2、pom文件3、坐标4、仓库maven项目的核心是pom.xml。POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等
4.0.0 com.nie spring1.0-SNAPSHOT war spring
第一行是xml头,指定了该xml文档的版本和编码方式,
groupId定义了项目属于哪个组,一般是域名倒序
artifactId定义了当前项目组中的唯一ID,一般是项目名
version定义了当前版本,SNAPSHOT是快照版本,表示项目还在开发中,是不太稳定的版本
仓库已在文章01maven概念与安装_梓源先生的博客-CSDN博客介绍 概念:当项目中使用某一jar包A,A.jar使用B.jar的某些API时,项目依赖了A.jar,A.jar依赖了B.jar 引入方式:在pom.xml文件中添加对应的坐标, A 依赖 B,B 依赖 C,A 调用C的API,这就是依赖的传递性 依赖管理 maven在编译、测试、运行的时候使用不同的classpath,依赖范围就是控制这三种依赖关系 依赖的jar默认任何情况都可使用,通过scope标签设定范围,默认是compile servlet-api为什么打包不需要? 概念:Maven 生命周期为了对所有的构建过程进行抽象和统一,定义了各个构建环节的执行顺序,有了这个清单,Maven 就可以自动化的执行构建命令了。 maven的生命周期是抽象的,实际行为都是又插件来完成的 Maven 有三套相互独立的生命周期,分别是: maven拥有三套独立的生命周期 Clean 生命周期 maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,在maven设计中,实际的任务(如编译源代码)都由插件来完成。这种思想采用了设计模式中的模板方法。既保证了算法的扩展性,又能严格控制算法的整体结果,maven为大多数构建步骤编写了默认插件,当用户有特殊需求的时候,可以配置插件自定义构建行为 maven在核心为一些主要的生命周期阶段内置绑定了很多的插件,当执行该生命周期的命令时,对应的插件目标就会执行相应的任务 内置绑定 default生命周期的内置绑定插件绑定关系及具体任务如下(打包jar类型) 自定义绑定:用户可以根据自己业务需求将某个插件目标绑定到生命周期的某个阶段, 比如tomcat插件 作用:通过继承可以实现在子工程中沿用父工程中的配置 使用方式: maven常见构建命令 maven命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔
5.1依赖的传递性:
直接传递:在当前项目中通过依赖配置建立的依赖关系
间接传递:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
依赖的排除(不需要):排除本项目中不使用的jar包
可选依赖(不透明):让被依赖者不能使用该jar包(私有化)
5.2依赖的范围:
scope 主代码 测试代码 打包 范例 compile √ √ √ log4j test √ junit provided √ √ servlet-api runtime √ jdbc
是因为打包嵌入tomcat服务器时,tomcat内部有servlet-api的jar包,如果不设置范围,会产生依赖冲突
①
pre-clean
执行一些需要在
clean
之前完成的工作
②
clean
移除所有上一次构建生成的文件
③
post-clean
执行一些需要在
clean
之后立刻完成的工作
Site 生命周期
①
pre-site
执行一些需要在生成站点文档之前完成的工作
②
site
生成项目的站点文档
③
post-site
执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
④
site-deploy
将生成的站点文档部署到特定的服务器上
这里经常用到的是
site
阶段和
site-deploy
阶段,用以生成和发布
Maven
站点,这是
Maven
相当强大的功能,Manager
比较喜欢,文档及统计数据自动生成
Default 生命周期
Default
生命周期是
Maven
生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里, 只解释一些比较重要和常用的阶段:
validate
generate-sources
process-sources
generate-resources
process-resources
复制并处理资源文件,至目标目录,准备打包。
compile
编译项目的源代码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources
复制并处理资源文件,至目标测试目录。
test-compile
编译测试源代码。
process-test-classes
test
使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package
package
接受编译好的代码,打包成可发布的格式,如
JAR
。
pre-integration-test
integration-test
post-integration-test
verify
install
将包安装至本地仓库,以让其它项目依赖。
deploy
将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。
命令行和生命周期:maven执行命令的主要作用就是调用maven的生命周期阶段,因为三套生命周期是相互独立的,所以想同时进行多个生命周期就要写组合命令,生命周期的阶段是有前后依赖关系的,也就是说执行了后面的生命周期,前面也会执行
mvn clean:调用clean,实际执行的为clean的生命周期里的pre-clean和clean阶段
mvn clean package:执行了clean的生命周期里的pre-clean和clean阶段和default生命周期从开始到package阶段
mvn clean install:行了clean的生命周期里的pre-clean和clean阶段和default生命周期从开始到install阶段
插件/目标
插件是支撑和扩展生命周期做的事,
如何理解生命周期和插件:比如,人的生命周期是一生,插件就相当于与人的功能年龄是抽象的概念,吃饭睡觉是实际人做的事,增加人的技能就相当于增加插件
7聚合
作用:一键安装各个工程模块
配置方式:创建一个空模块,打包类型定义为pom
定义当前模块进行构建操作时关联的其他模块名称
参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关
8继承
maven中的继承与java中的继承类似,在子工程中配置继承关系
在子工程中声明其父工程坐标与对应的位置
附加:
mvn compile 编译 mvn clean 清理 mvn test 测试 mvn package 打包 mvn install 安装到本地仓库



