(七)maven生命周期与插件

本文详细介绍了Maven的生命周期,包括clean、default和site三个生命周期及其各自包含的phase,阐述了maven命令行执行原理。讨论了插件与goal的关系,并展示了如何将插件goal绑定到phase上,以及如何配置和使用Maven插件。同时,提供了查找和理解Maven插件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

maven生命周期

maven生命周期以及执行原理

maven的生命周期以及phase

默认的phase和plugin绑定

maven的命令行和生命周期

maven插件

插件和goal

将插件的goal绑定到phase上

配置插件

找到你需要的插件

插件解析


maven生命周期

  • mvn命令demo

mvn clean package:打包

mvn clean install: 安装到本地

mvn clean deploy:部署到远程私服

maven生命周期以及执行原理

  • maven生命周期,就是mvn各种命令背后的原理,就是对传统软件项目构建工作的抽象 (清理、初始化、编译、测试、打包、集成测试、验证、部署、站点生成)
  • maven有三套完全独立的生命周期

clean, default, site

每套生命周期都可以独立运行,每个生命周期的运行都会包含多个phase,每个phase又是由各种插件的goal来完成的,一个插件的goal可以认为是一个功能。

这就是maven的生命周期 -> phase(可以理解为阶段) -> 插件的关系,也是maven构建执行的核心原理

你每次执行一个生命周期,都会依次执行这个生命周期内部的多个phase,每个phase执行时都会执行某个插件的goal完成具体的功能

maven的生命周期以及phase

  • clean生命周期包含的phase
  • pre-clean
  • clean
  • post-clean
  • default生命周期包含的phase
  • validate:校验这个项目的一些配置信息是否正确
  • initialize:初始化构建状态,比如设置一些属性,或者创建一些目录
  • generate-sources:自动生成一些源代码,然后包含在项目代码中一起编译
  • process-sources:处理源代码,比如做一些占位符的替换
  • generate-resources:生成资源文件,才是干的时我说的那些事情,主要是去处理各种xml、properties那种配置文件,去做一些配置文件里面占位符的替换
  • process-resources:将资源文件拷贝到目标目录中,方便后面打包
  • compile:编译项目的源代码
  • process-classes:处理编译后的代码文件,比如对java class进行字节码增强
  • generate-test-sources:自动化生成测试代码
  • process-test-sources:处理测试代码,比如过滤一些占位符
  • generate-test-resources:生成测试用的资源文件
  • process-test-resources:拷贝测试用的资源文件到目标目录中
  • test-compile:编译测试代码
  • process-test-classes:对编译后的测试代码进行处理,比如进行字节码增强
  • test:使用单元测试框架运行测试
  • prepare-package:在打包之前进行准备工作,比如处理package的版本号
  • package:将代码进行打包,比如jar包
  • pre-integration-test:在集成测试之前进行准备工作,比如建立好需要的环境
  • integration-test:将package部署到一个环境中以运行集成测试
  • post-integration-test:在集成测试之后执行一些操作,比如清理测试环境
  • verify:对package进行一些检查来确保质量过关
  • install:将package安装到本地仓库中,这样开发人员自己在本地就可以使用了
  • deploy:将package上传到远程仓库中,这样公司内其他开发人员也可以使用了
  • site生命周期的phase
  • pre-site
  • site
  • post-site
  • site-deplo

默认的phase和plugin绑定

  • 实际上,默认maven就绑定了一些plugin goal到phase上去,比如:类似于resources:resources这种格式,说的就是resources这个plugin的resources goal(resources功能,负责处理资源文件)

process-resources                        resources:resources

compile                                           compiler:compile

process-test-resources                 resources:testResources

test-compile                                   compiler:testCompile

test                                                  surefire:test

package                                                 jar:jar或者war:war

install                                              install:install

deploy                                            deploy:deploy

  • site生命周期的默认绑定是:

site                                site:site

site-deploy                    site:deploy

  • clean生命周期的默认

clean                           clean:clean

maven的命令行和生命周期

  • 比如mvn clean package

clean是指的clean生命周期中的clean phase

package是指的default生命周期中的package phase

此时就会执行clean生命周期中,在clean phase之前的所有phase和clean phase,pre clean,clean

同时会执行default生命周期中,在package phase之前的所有phase和package phase

  • mvn clean package

但是,pre clean phase默认是没有绑定任何一个plugin goal的,所以默认什么也不会干;

clean phase默认是绑定了clean:clean,clean plugin的clean goal,所以就会去执行clean插件的clean goal,就会实现一个功能,就是清理target目录下的文件

process-resources                        resources:resources

compile                                         compiler:compile

process-test-resources                 resources:testResources

test-compile                                  compiler:testCompile

test                                                surefire:test

package                                        jar:jar或者war:war

install                                            install:install

deploy                                          deploy:deploy

  • mvn dependency:tree      mvn deploy:deploy-file

就是不执行任何一个生命周期的任何一个phase

直接执行指定的插件的一个goal

比如mvn dependency:tree,就是直接执行dependency这个插件的tree这个goal,这个意思就是会自动分析pom.xml里面的依赖声明,递归解析所有的依赖,然后打印出一颗依赖树

mvn deploy:depoy-file,就是直接执行deploy这个插件的deploy-file这个goal,这个意思就是说将指定目录的jar包,以指定的坐标,部署到指标的maven私服仓库里去,同时使用指定仓库id对应的server的账号和密码。

maven插件

插件和goal

  • 每个插件都有多个goal,每个goal都是一个具体的功能

dependency插件有十几个goal,可以进行分析项目依赖,列出依赖树,等等

插件的goal,写法就是plugin:goal,比如dependency:tree

用mvn dependency:tree,就可以手动执行某个插件的goal,执行某种功能

将插件的goal绑定到phase上

  • maven内置就会绑定一些插件的goal到phase上,我们如果要使用某个maven插件,如何手动将插件的goal绑定到phase上
  • 比如将source插件的jar-no-fork goal绑定到verify phase,在完成集成测试之后,就生成源码的jar包,这里可以看到绑定plugin的语法:

<build>

       <plugins>

              <plugin>

                     <groupId>org.apache.maven.plugins</groupId>

                     <artifactId>maven-source-plugin</artifactId>

                     <version>2.1.1</version>

                     <executions>

                            <execution>

                                   <id>attach-sources</id>

                                   <phase>verify</phase>

                                   <goals>

                                          <goal>jar-no-fork</goal>

                                   </goals>

                            </execution>

                     </executions>

              </plugin>

       </plugins>

</build>

运行mvn verify,就可以看到生成了一个包含源码的jar包

即使不配置绑定的phase也可以,因为大多数插件都默认内置了要绑定的phase,比如这个插件就内置绑定在package phase。

配置插件

如果在命令行执行插件,可以用-Dkey=value来进行插件的设置

比如mvn install -Dmaven.test.skip=true,就是surefire插件在测试的时候提供的参数,设置为true就会跳过测试

此外也可以在pom.xml中用来配置

<build>

       <plugins>

              <plugin>

                     <groupId>org.apache.maven.plugins</groupId>

                     <artifactId>maven-compiler-plugin</artifactId>

                     <version>2.1</version>

                     <configuration>

                            <source>1.5</source>

                            <target>1.5</target>

                     </configuration>

              </plugin>

       </plugins>

</build>

找到你需要的插件

在http://maven.apache.org/plugins/index.html中可以找到所有的插件,里面有文档

你可以百度搜索,用maven启动jetty插件,用maven部署tomcat插件

插件解析

先从本地仓库找插件,没有则从远程仓库找插件

插件的远程仓库也需要配置,maven默认配置了远程的插件仓库

<pluginRepositories>

       <pluginRepository>

              <id>central</id>

              <name>Maven Plugin Repository</name>

              <url>http://repo1.maven.org/maven2</url>

              <layout>default</layout>

              <snapshots>

                     <enabled>false</enabled>

              </snapshots>

              <releases>

                     <updatePolicy>never</updatePolicy>

              </releases>

       </pluginRepository>

</pluginRepositories>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码海拾贝2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值