Maven仓库 和生命周期

来源:互联网 发布:java外包公司 编辑:程序博客网 时间:2024/06/05 05:28

对于maven来说,仓库分为:本地仓库和远程仓库。
当maven根据坐标寻找构建时,会首先查看本地仓库,存在则直接使用,如果本地仓库不存在此构件,或者需要最新版本时,maven就会去远程仓库查找,发现需要的构建之后,下载到本地仓库使用。

安装好maven后,如果不执行任何maven命令,本地仓库目录是不存在的。当用户输入第一条maven命令后,maven才会创建本地仓库,然后根据需要和配置,下载构件到本地仓库。

Maven的安装文件自带了中央仓库的配置。jar文件路径:lib/maven-model-builder-3.3.9.jar文件。然后范围路径:maven-model-builder-3.3.9.jar\org\apache\maven\model\pom-4.0.0.xml中,会看到如下配置:

<repositories>    <repository>      <id>central</id>      <name>Central Repository</name>      <url>https://repo.maven.apache.org/maven2</url>      <layout>default</layout>      <snapshots>        <enabled>false</enabled>      </snapshots>    </repository>  </repositories>

这段配置文件是所有maven项目都会继承的超级pom。

Maven生命周期
maven生命周期包括:项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等步骤。

maven的生命周期是抽象的,生命周期本身不做任何实际的工作。实际的任务由插件完成。每个构建步骤都可以绑定一个或者多个插件行为,而且maven为大多数构建步骤编写并绑定了默认插件。比如,编译的插件maven-compiler-plugin;测试的插件:maven-surefire-plugin。

Maven拥有三套相互独立的生命周期,分别是:
clean生命周期:清理项目
default生命周期:构建项目
site生命周期:建立项目站点
每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和maven最直接的交互方式就是调用这些生命周期阶段。

三套生命周期相互独立。可以单独调用某个生命周期的某个阶段,而不会对其他生命周期产生影响。

clean生命周期
包含三个阶段:
1、pre-clean:执行清理前需要完成的工作
2、clean:清理上一次构建产生的文件
3、post-clean:执行一些清理后需要完成的工作

default生命周期
定义了真正构建时所需要执行的所有步骤,包含的阶段如下:
1、validate
2、initialize
3、generate-sources
4、process-sources:处理项目主资源文件
5、generate-resources
6、process-resources
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、post-integration-test
21、verify
22、install:将包安装到本地仓库
23、deploy:将最终的包复制到远程仓库。

site生命周期
1、pre-site
2、site:生产项目站点文档
3、post-site
4、site-deploy:将生产的项目站点发布到服务器上。

以上各个生命周期是相互独立的,而一个生命周期的阶段是有前后依赖关系的。
例如:执行mvn test:该命令调用default生命周期的test阶段。实际执行的生命周期是validate、initialize等,直到test的所有阶段。

执行mvn clean install:该命令调用clean生命周期的clean阶段和default生命周期的install阶段。该命令结合两个生命周期。

插件
一个插件里聚集很多目标,而每个目标就是一个功能。例如:dependency:analyze。冒号前是插件前缀,后面是插件目标。
maven的生命周期与插件相互绑定,用以完成实际的构建任务。具体而言,就是生命周期的阶段与插件的目标项目绑定。

maven会在每个生命周期的某个阶段内置一些插件。有些阶段没有绑定任何插件,也就没有任何实际行为。

0 0
原创粉丝点击