阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

构建流程

27次阅读
没有评论

共计 1886 个字符,预计需要花费 5 分钟才能阅读完成。

构建流程

Maven 不但有标准化的项目结构,而且还有一套标准化的构建流程,可以自动化实现编译,打包,发布,等等。

Lifecycle 和 Phase

使用 Maven 时,我们首先要了解什么是 Maven 的生命周期(lifecycle)。

Maven 的生命周期由一系列阶段(phase)构成,以内置的生命周期 default 为例,它包含以下 phase:

  • validate
  • initialize
  • 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
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install
  • deploy

如果我们运行 mvn package,Maven 就会执行default 生命周期,它会从开始一直运行到 package 这个 phase 为止:

  • validate
  • initialize
  • prepare-package
  • package

如果我们运行 mvn compile,Maven 也会执行default 生命周期,但这次它只会运行到compile,即以下几个 phase:

  • validate
  • initialize
  • process-resources
  • compile

Maven 另一个常用的生命周期是clean,它会执行 3 个 phase:

  • pre-clean
  • clean(注意这个 clean 不是 lifecycle 而是 phase)
  • post-clean

所以,我们使用 mvn 这个命令时,后面的参数是 phase,Maven 自动根据生命周期运行到指定的 phase。

更复杂的例子是指定多个 phase,例如,运行 mvn clean package,Maven 先执行clean 生命周期并运行到 clean 这个 phase,然后执行 default 生命周期并运行到 package 这个 phase,实际执行的 phase 如下:

  • pre-clean
  • clean(注意这个 clean 是 phase)
  • validate(开始执行 default 生命周期的第一个 phase)
  • initialize
  • prepare-package
  • package

在实际开发过程中,经常使用的命令有:

mvn clean:清理所有生成的 class 和 jar;

mvn clean compile:先清理,再执行到compile

mvn clean test:先清理,再执行到 test,因为执行test 前必须执行compile,所以这里不必指定compile

mvn clean package:先清理,再执行到package

大多数 phase 在执行过程中,因为我们通常没有在 pom.xml 中配置相关的设置,所以这些 phase 什么事情都不做。

经常用到的 phase 其实只有几个:

  • clean:清理
  • compile:编译
  • test:运行测试
  • package:打包

Goal

执行一个 phase 又会触发一个或多个 goal:

执行的 Phase 对应执行的 Goal
compile compiler:compile
test compiler:testCompile
surefire:test

goal 的命名总是 abc:xyz 这种形式。

看到这里,相信大家对 lifecycle、phase 和 goal 已经明白了吧?

构建流程

其实我们类比一下就明白了:

  • lifecycle 相当于 Java 的 package,它包含一个或多个 phase;
  • phase 相当于 Java 的 class,它包含一个或多个 goal;
  • goal 相当于 class 的 method,它其实才是真正干活的。

大多数情况,我们只要指定 phase,就默认执行这些 phase 默认绑定的 goal,只有少数情况,我们可以直接指定运行一个 goal,例如,启动 Tomcat 服务器:

$ mvn tomcat:run

小结

Maven 通过 lifecycle、phase 和 goal 来提供标准的构建流程。

最常用的构建命令是指定 phase,然后让 Maven 执行到指定的 phase:

  • mvn clean
  • mvn clean compile
  • mvn clean test
  • mvn clean package

通常情况,我们总是执行 phase 默认绑定的 goal,因此不必指定 goal。

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-08-05发表,共计1886字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中