首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

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

2013-04-12 
maven日记(四):生命周期和插件?maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,在maven

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>

?

热点排行