构建流程

黑派客     最近更新时间:2020-01-17 09:28:22

719

构建流程

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

  • ...

  • package

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

  • validate

  • ...

  • 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

  • ...

  • 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
compilecompiler:compile
testcompiler:testCompile
surefile:test

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

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

meng

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

展开阅读全文