深入理解maven及应用.docx

上传人:b****5 文档编号:7292888 上传时间:2023-01-22 格式:DOCX 页数:12 大小:21.42KB
下载 相关 举报
深入理解maven及应用.docx_第1页
第1页 / 共12页
深入理解maven及应用.docx_第2页
第2页 / 共12页
深入理解maven及应用.docx_第3页
第3页 / 共12页
深入理解maven及应用.docx_第4页
第4页 / 共12页
深入理解maven及应用.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

深入理解maven及应用.docx

《深入理解maven及应用.docx》由会员分享,可在线阅读,更多相关《深入理解maven及应用.docx(12页珍藏版)》请在冰豆网上搜索。

深入理解maven及应用.docx

深入理解maven及应用

1、三套生命周期

    对于maven的生命周期来说,共有三个相互独立的生命周期,分别是clean、default、site。

clean生命周期目的是清理项目,default生命周期目的是构建项目,而site生命周期目的是建立项目站点。

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

如clean生命周期包含pre-clean、clean和post-clean三个阶段,如果执行clean阶段,则会先执行pre-clean阶段。

    较之于生命周期阶段有前后依赖关系,三套生命周期本身是相互独立的,用户可以仅调用clean生命周期的某个阶段,也可以不执行clean周期,而直接执行default生命周期的某几个阶段。

2、clean生命周期

    clean生命周期包含三个阶段,主要负责清理项目,如下:

 

pre-clean

executesprocessesneededpriortotheactualprojectcleaning

clean

removeallfilesgeneratedbythepreviousbuild

post-clean

executesprocessesneededtofinalizetheprojectcleaning

 

3、default生命周期

   default生命周期定义了真正构建时所需要执行的所有步骤,包含的阶段如下:

 

validate

validatetheprojectiscorrectandallnecessaryinformationisavailable.

initialize

initializebuildstate,e.g.setpropertiesorcreatedirectories.

generate-sources

generateanysourcecodeforinclusionincompilation.

process-sources

processthesourcecode,forexampletofilteranyvalues.

generate-resources

generateresourcesforinclusioninthepackage.

process-resources

copyandprocesstheresourcesintothedestinationdirectory,readyforpackaging.

compile

compilethesourcecodeoftheproject.

process-classes

post-processthegeneratedfilesfromcompilation,forexampletodobytecodeenhancementonJavaclasses.

generate-test-sources

generateanytestsourcecodeforinclusionincompilation.

process-test-sources

processthetestsourcecode,forexampletofilteranyvalues.

generate-test-resources

createresourcesfortesting.

process-test-resources

copyandprocesstheresourcesintothetestdestinationdirectory.

test-compile

compilethetestsourcecodeintothetestdestinationdirectory

process-test-classes

post-processthegeneratedfilesfromtestcompilation,forexampletodobytecodeenhancementonJavaclasses.ForMaven2.0.5andabove.

test

runtestsusingasuitableunittestingframework.Thesetestsshouldnotrequirethecodebepackagedordeployed.

prepare-package

performanyoperationsnecessarytoprepareapackagebeforetheactualpackaging.Thisoftenresultsinanunpacked,processedversionofthepackage.(Maven2.1andabove)

package

takethecompiledcodeandpackageitinitsdistributableformat,suchasaJAR.

pre-integration-test

performactionsrequiredbeforeintegrationtestsareexecuted.Thismayinvolvethingssuchassettinguptherequiredenvironment.

integration-test

processanddeploythepackageifnecessaryintoanenvironmentwhereintegrationtestscanberun.

post-integration-test

performactionsrequiredafterintegrationtestshavebeenexecuted.Thismayincludingcleaninguptheenvironment.

verify

runanycheckstoverifythepackageisvalidandmeetsqualitycriteria.

install

installthepackageintothelocalrepository,foruseasadependencyinotherprojectslocally.

deploy

doneinanintegrationorreleaseenvironment,copiesthefinalpackagetotheremoterepositoryforsharingwithotherdevelopersandprojects.

 

 

4、site生命周期

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

    

pre-site

executesprocessesneededpriortotheactualprojectsitegeneration

site

generatestheproject'ssitedocumentation

post-site

executesprocessesneededtofinalizethesitegeneration,andtoprepareforsitedeployment

site-deploy

deploysthegeneratedsitedocumentationtothespecifiedwebserver

 

5、命令行与生命周期

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

需要注意的是,各个生命周期是相互独立的,而一个生命周期的阶段是有前后依赖关系的。

例子如下:

    1、$mvnclean:

该命令调用clean生命周期的clean阶段。

实际执行的阶段为clean生命周期的pre-clean和clean阶段。

    2、$mvntest:

该命令调用default生命周期的test阶段。

实际调用的是default生命周期的validate、initialize等,直到test的所有阶段。

    3、$mvncleaninstall:

该命令调换用clean生命周期的clean阶段和default生命周期的instal阶段。

6、插件目标

     maven的核心仅仅定义了抽象的生命周期,具体的任务是交由插件完成的,插件以独立的形式存在。

    对于插件本身,为了能够复用代码,它往往能够完成多个任务。

如maven-dependency-plugin有十多个目标,每个目标对应了一个功能,如dependency:

analyze、dependency:

tree和dependency:

list。

这是一种通用的写法,冒号前面是插件前缀,后面是该插件的目标。

7、插件绑定

 maven的生命周期与插件相互绑定,用以完成实际的构建任务。

具体而言,是生命周期的阶段与插件的目标相互绑定,已完成某个具体的构建任务。

例如项目编译这一任务,它对应了default生命周期的compile阶段,而maven-compiler-plugin这一插件的compile目标能够完成该任务,因此将他们绑定。

7.1内置绑定

 maven在核心为一些主要的生命周期接到绑定了很多插件的目标,如下:

    clean和site生命周期相对简单。

 

clean

clean:

clean

 

 

site

site:

site

site-deploy

site:

deploy

 

    default生命周期与插件目标的绑定关系有点复杂一些。

这是因为对于任何项目来说,例如jar项目和war项目,他们的项目清理和站点生成任务是一样的,不过构建过程会有区别。

例如jar项目需要打成jar包,而war项目需要打成war包。

     由于项目的打包类型会影响构建的具体过程,因此,default生命周期的阶段与插件目标的绑定关系有项目打包类型所决定的,打包类型是通过pom中的packaging元素定义的。

最常见的打包类型是jar,它也是默认的打包类型。

基于该打包类型,default生命周期的内置绑定关系如下:

 

process-resources

resources:

resources

compile

compiler:

compile

process-test-resources

resources:

testResources

test-compile

compiler:

testCompile

test

surefire:

test

package

ejb:

ejb or ejb3:

ejb3 or jar:

jar or par:

par or rar:

rar or war:

war

install

install:

install

deploy

deploy:

deploy

 

 

7、2自定义绑定

    除了内置绑定以为,用户还能够自己选择奖某个插件目标绑定到生命周期的某个阶段以执行更多更特色的任务。

[html] viewplaincopyprint?

 

1.

-- 自动复制资源文件件到根目录 -->  

2.              

3.                org.apache.maven.plugins  

4.                maven-resources-plugin  

5.                2.6  

6.                  

7.                    true  

8.                    GBK  

9.                      

10.                        exe  

11.                        zip  

12.                        vbs  

13.                        sh  

14.                      

15.                  

16.                  

17.                      

18.                        copy-resources  

19.                        validate  

20.                          

21.                            copy-resources  

22.                          

23.                          

24.                            true  

25.                            ${project.build.directory}  

26.                              

27.                                agentmanager.jsmooth  

28.                                assembly.xml  

29.                              

30.                              

31.                                  

32.                                    src/main/resources/  

33.                                    true  

34.                                  

35.                              

36.                          

37.                      

38.                  

39.              

    如上图定义了一个id为copy-resources的任务,绑定到default生命周期的validate阶段,绑定的插件为maven-resources-plugin,插件目标为copy-resources。

即用插件的copy-resources功能来实现项目资源文件的拷贝。

[html] viewplaincopyprint?

 

1.

-- 自动复制maven依赖包到lib目录 -->  

2.              

3.                org.apache.maven.plugins  

4.                maven-dependency-plugin  

5.                2.1  

6.                  

7.                      

8.                        copy  

9.                        install  

10.                          

11.                            copy-dependencies  

12.                          

13.                          

14.                            lib  

15.                          

16.                      

17.                  

18.              

同上,定义了一个id为copy的任务,利用插件maven-dependency-plugin的copy-dependencies目标绑定到default生命周期的install阶段,来实现项目依赖的jar包的自动复制。

     当插件目标被绑定到不同的生命周期阶段时候,其执行顺序会有生命周期阶段的先后顺序决定的。

如果多个目标被绑定到同一个阶段,他们的执行顺序是由插件声明的先后顺序决定目标的执行顺序。

8、插件配置

 用户可以配置插件目标的参数,进一步调整插件目标所执行的任务。

8、1命令行插件配置

 如$mvninstall-Dmaven.test.skip=true的意义即跳过测试步骤。

     参数-D的java自带的,其功能是通过命令行设置一个java系统属性,maven简单地重用了该参数以实现插件参数的配置。

8、2pom中插件全局配置

如项目编译使用1.6版本的源文件,生成与JVM1.6兼容的字节码文件,如下:

[html] viewplaincopyprint?

 

1.  

2.                org.apache.maven.plugins  

3.                maven-compiler-plugin  

4.                2.3.2  

5.                  

6.                    1.6  

7.                    1.6  

8.                  

9.              

 

9、获取插件描述信息

   $mvnhelp:

describe-Dplugin=org.apache.maven.plugins:

maven-compiler-plugin:

2.1 来获取插件的详细信息

   可以简化为:

   $mvnhelp:

describe-Dplugin=compiler

   如果仅仅描述插件目标的信息,可以加上goal参数:

   $mvnhelp:

describe-Dplugin=compiler-Dgoal=compile

   如果想输出更详细的信息,可以加上detail参数:

   $mvnhelp:

describe-Dplugin=compiler-Ddetail

(二):

灵活的构建

原文地址:

参考官方url:

http:

//maven.apache.org/guides/index.html

 一个优秀的构建系统必须足够灵活,应该能够让项目在不同的环境下都能成功构建。

maven为了支持构建的灵活性,内置了三大特性,即:

属性、profile和资源过滤。

1、maven属性

 maven属性分6类:

   1、内置属性:

如${basedir}表示项目根目录,${version}表示项目版本

   2、POM属性:

用户可以引用pom文件中对应的值。

如:

        ${basedir}项目根目录

        ${project.build.directory}构建目录,缺省为target

         ${project.build.outputDirectory}构建过程输出目录,缺省为target/classes

         ${project.build.finalNam

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职业技术培训

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1