`

maven日记(四):生命周期和插件

阅读更多

 

maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,在maven的设计中,实际的任务(比如编译源代码)都交由插件去完成。这种设计思想与设计模式中的模板方法非常类似。

public abstract class AbstractBuild {
    public void build() {
        initialize();
        compile();
        test();
        packagee();
        integrationTest();
        deploy();
    }
 
    protected abstract void initialize();
 
    protected abstract void compile();
 
    protected abstract void test();
 
    protected abstract void packagee();
 
    protected abstract void integrationTest();
 
    protected abstract void deploy();
}

在maven的生命周期中,每个步骤可以绑定一个或多个插件行为,而且maven为大多数构建步骤编写并绑定了默认插件。例如针对编译的插件有maven-compiler-plugin,针对测试有maven-surefire-plugin等。

>> 三套生命周期详解

初学者往往以为maven生命周期是一个整体,其实不然,maven拥有三套相互独立的生命周期,它们分别是clean、default和site。clean升级周期目的是清理项目,default生命周期的目的是构件项目,而site生命周期目的是建立项目站点。

每个生命周期包含一些阶段phase,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段。

三套生命周期是相互独立的,比如当用户调用default生命周期的compile阶段的时候,是不会执行clean的,知道我要说啥了吧。

>> clean生命周期:

* pre-clean:执行清理前需要完成的工作

* clean清理上一次构建生成的文件

* post-clean:执行一些清理后需要完成的工作

>> default生命周期:

* validate

* initialize

* generate-sources

* process-sources:处理项目主资源文件。一般来说是对/src/main/resources/目录的内容进行变量替换等工作后,复制到输出目录的主classpath中去

* generate-resources

* process-resources

* compile:编译项目主源码到输出目录中去

* process-classes

* generate-test-sources

* process-test-sources:处理项目测试资源文件。一般来说,是对/src/test/resources目录内容进行变量替换等工作后,复制到项目输出的测试classpath中

* generate-test-resources

* process-test-resources

* test-compile:编译项目的测试代码。一般来说是编译/src/test/java目录下的java文件到输出的测试classpath目录中

* process-test-classes

* test:使用单元测试框架进行测试,测试代码不会被打包后部署

* prepare-package

* package:接受编译好的代码,打包成可发布格式比如jar

* pre-integration-test

* integration-test

* post-integration-test

* verify

* install:将包安装到maven本地仓库中,供本地其他maven项目使用

* deploy:将最终的包复制到远程仓库,供其他开发人员和maven项目使用。

这里只是将重点的几个阶段解释了下,对于其他的可用查阅官方文档:

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

>> site生命周期

site生命周期目的是建立和发布项目站点,maven能够基于pom所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。该生命周期包含如下阶段:

* pre-site:执行在生成项目站点之前需要完成的工作

* site:生成项目站点

* post-site:执行在生成项目站点之后需要完成的工作

* site-deploy:将生成的项目站点发布到服务器上

>> 命令行与生命周期

从命令行执行maven任务最主要的方式就是调用maven的生命周期阶段:

mvn clean:调用clean生命周期的clean阶段,实际是pre-clean和clean阶段

mvn test:执行default生命周期的test阶段,也就是从validate一直到test阶段

mvn clean install:执行clean生命周期到clean阶段,然后执行default生命周期到install阶段

mvn clean deploy site-deploy:不解释了。。。

>> 自定义绑定

除了还内置绑定外,用户还可以自己绑定某个插件目标到生命周期某个阶段上,比如创建项目的源码source的jar包:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.1.1</version>
            <executions>
                <execution>
                    <id>attache-sources</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

插件的仓库配置:

<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>

 

本人博客已搬家,新地址为:http://yidao620c.github.io/

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics