Maven(2.0.9) 运行过程

Maven的运行理念:

maven提供了一个平台,plugins能被这个平台所管理和利用,通过这些plugin根据平台所提供的项目信息来管理项目。(项目信息来源pom文件).

 maven 默认情况对项目定义了3个项目管理周期

  1. default
  2. clean
  3. site

 具体描述,大家可以在%M2_HOME%/lib/maven-2.0.9-uber.jar!/META-INF/plexus/components.xml

 <lifecycle>
            <id>default</id>
            <phases>
              <phase>validate</phase>
              <phase>initialize</phase>
              <phase>generate-sources</phase>
              <phase>process-sources</phase>
              <phase>generate-resources</phase>
              <phase>process-resources</phase>
              <phase>compile</phase>
              <phase>process-classes</phase>
              <phase>generate-test-sources</phase>
              <phase>process-test-sources</phase>
              <phase>generate-test-resources</phase>
              <phase>process-test-resources</phase>
              <phase>test-compile</phase>
              <phase>process-test-classes</phase>
              <phase>test</phase>
              <phase>package</phase>
              <phase>pre-integration-test</phase>
              <phase>integration-test</phase>
              <phase>post-integration-test</phase>
              <phase>verify</phase>
              <phase>install</phase>
              <phase>deploy</phase>
            </phases>
          </lifecycle>
          <lifecycle>
            <id>clean</id>
            <phases>
              <phase>pre-clean</phase>
              <phase>clean</phase>
              <phase>post-clean</phase>
            </phases>
            <default-phases>
              <clean>org.apache.maven.plugins:maven-clean-plugin:clean</clean>
            </default-phases>
          </lifecycle>
          <lifecycle>
            <id>site</id>
            <phases>
              <phase>pre-site</phase>
              <phase>site</phase>
              <phase>post-site</phase>
              <phase>site-deploy</phase>
            </phases>
            <default-phases>
              <site>org.apache.maven.plugins:maven-site-plugin:site</site>
              <site-deploy>org.apache.maven.plugins:maven-site-plugin:deploy</site-deploy>
            </default-phases>
          </lifecycle>

 每个phase绑定一些goal,这些goal就是在plugins中定义的。

Maven从命令行中运行有两种方式

  1. mvn 某一个phase
  2. mvn 某一个goal

当然可以是一组phase,或者一组goal,设置可以是一组phase和一组goal一起执行

 

 Maven 运行一个phase

运行过程:

  • 根据phase找到具体的lifecyle,并找到该lifecyle中该phase以前的所有phase集合并包括本身的phase
  • 根据这些phase集合,绑定每个phase中plugins的goals集合,一些phase中邦定的goal是系统指定的,比如针对jar的项目
<lifecycle>
            <id>default</id>
            <phases>
              <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
              <compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
              <process-test-resources>org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources>
              <test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
              <test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
              <package>org.apache.maven.plugins:maven-jar-plugin:jar</package>
              <install>org.apache.maven.plugins:maven-install-plugin:install</install>
              <deploy>org.apache.maven.plugins:maven-deploy-plugin:deploy</deploy>
            </phases>
          </lifecycle>

 

  •  用户也可以在相关的phase中指定自己的goal,在pom文件描述比如:
<build>
    <plugins>
        <plugin>***</plugin>
		<executions>
          <execution>**</execution>
		</executions>
	</plugins>
</build>

 

  •  这些goal运行都是一个线程,而且都是使用自己的classloader,都是maven平台的classloader的child.

 

Maven 运行一个goal

效果跟运行一个phase差不多,不过就是只是运行一个goal而已,当然我们也可以指定这个goal运行时,必须运

行其他的goal或者运行一个phase,这就是牵涉到maven-plugin开发

 

Maven plugins开发

maven plugins开发模式类似javadoc的annoation,当然如果你够猛,也可以直接写plugin.xml,因为这个东西是在

runtime过程中真正被maven用到的,不过maven可以根据plugin的annoation生产plugin.xml

 

每一个goal就是AbstractMojo的子类

他有以下annoation

@goal: 名称

@phase: 说明这个goal绑定的phase,当然这个是可以override

@execute goal="othergoal" 说明运行这个goal的时候,必须先运行othergoal

@execute phase="**" 说明运行这个goal的时候,必须先运行指定的phase

@execute lifecyle="**" phase="**" 跟上面差不多,不过这个phase在指定的lifecyle里面,lifecyle除了其他定义的,我们也可以定义自己的

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值