1.maven与ant与make的基本区别:
- 最早出现的是make的makeFile,但是强依赖与编写的操作系统,不是跨平台,于是ant出现,因为ant用java写的,所以ant跨平台了,但是ant和make一样都是过程式开发,在不同的工程中重复性劳动多,于是maven出现,因为maven是声明式开发,有插件,不需要做那么多的复制粘贴
- Maven还有很多Ant没有的高级特性,例如依赖管理等,这一切使得Maven不仅是构建工具,更是项目管理工具,并越发流行起来。
2.Maven拥有三套相互独立的生命周期,它们分别为clean,default和site:
- Clean Lifecycle在进行真正的构建之前进行一些清理工作。
- Default Lifecycle构建的核心部分,编译,测试,打包,部署等等。
- Site Lifecycle生成项目报告,站点,发布站点。
3.各个生命周期的关系:
maven各个生命周期相互独立,但是对应的生命周期的各个阶段是相互依赖的。比如:clean和default之间是独立的,但是clean的各个阶段是相互依赖,并依次执行的。
-
clean生命周期
clean生命周期的目的是清理项目,它包含三个阶段:
1)pre-clean 执行一些清理前需要完成的工作。
2)clean 清理上一次构建生成的文件。
3)post-clean 执行一些清理后需要完成的工作。
-
default生命周期
default生命周期定义了真正构件时所需要执行的所有步骤,它是生命周期中最核心的部分,它包含的阶段如下:
1) validate 验证项目是否正确和所有需要的相关资源是否可用
2) initialize 初始化构建
3) generate-sources
4)process-sources 处理源代码
5) generate-resources
6)process-resources 处理项目主资源文件。对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。
7) compile 编译项目的主源代码
8) process-classes
9)generate-test-sources
10)process-test-sources 处理项目测试资源文件
11)generate-test-resources
12)process-test-resources 处理测试的资源文件
13)test-compile 编译项目的测试代码
14)process-test-classes
15)test 使用单元测试框架运行测试,测试代码不会被打包或部署
16)prepare-package 做好打包的准备
17)package 接受编译好的代码,打包成可发布的格式
18)pre-integration-test
19)integration-test
20)postintegration-test
21)verify
22)install 将包安装到Maven本地仓库,供本地其他Maven项目使用
23)deploy 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用
-
site生命周期
site生命周期的目的是建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。该生命周期包含如下阶段:
1)pre-site 执行一些在生成项目站点之前需要完成的工作
2)site 生成项目站点文档
3)post-site 执行一些在生成项目站点之后需要完成的工作
4)site-deploy 将生成的项目站点发布到服务器上
4.Artifact & Repositories:
1).Artifact:一个项目将要产生的文件,可以是jar文件,源文件,二进制文件,war文件,甚至是pom
2).Repositories是用来存储Artifact的
5.repositories和pluginRepositories和distributionManagement的异同
- 构件可以分为两类
一类是被其他构件依赖的构件(dependencies),这也是Maven库中主要的构件。另一类是插件(plugins),这是一种特殊的构件.
Repositories:专门用于构件在远程库的存储
pluginRepositories:由于插件的特殊性,所以插件会和构件分开存储
distributionManagement:包含和,
前者:部署后发布的库
后者:更侧重于开发过程中发布的库(快照版)
注:Repositories和pluginRepositories可设置在profile中,也可设置在profile外,project内:区别:前者:更侧重于工程中某个环境的库,后者:是适用于整个工程的库 - 在pom.xml或settings.xml中设置,往往需要提供一个的如下信息:
id,库的ID
name,库的名称
url,库的URL
releases,库中版本为releases的构件
snapshots,库中版本为snapshots的构件
根据构件的版本,可以将构件分为releases类型的构件和snapshots类型的构件。
对于一个构件,其版本的变化是否会引起库中更新该构件呢?则需要根据库的或设置。和的设置可以参数一致
enabled,是否支持更新
updatePolicy,构件4种更新的策略,可选值有daily, always, never, interval:X(其中的X是一个数字,表示间隔的时间,单位min),默认为daily
checksumPolicy,校验码异常的策略,可选值有ignore, fail, warn
6.mvn install 和mvn clean和mvn package和mvn deploy的区别
Mvn package:会将工程打成jar包(看pom),并放在target目录下
mvn install:会将工程打成jar包(看pom怎么配),并放于m2的目录下以及target目录下
Mvn deploy:会将工程打成jar包(看pom),并放于m2和target中,且部署到远程服务器
Mvn clean:会删除target目录