maven摘要

一、maven生命周期

1.1maven生命周期理解及具体内容

maven生命周期可以理解为项目构建时的各个步骤,并且这些步骤是有一定次序的。只是这些规定好的步骤没有具体的实现。这些步骤的具体实现是由插件完成的,所以,插件机制也是maven的一大特点。

那maven具体的生命周期有什么内容呢,先看下面的拓展图:


正如图所示,maven的有三套生命周期,分别为clean、default、sit三套生命周期,概述如下:

clean生命周期:用来清理项目
default生命周期:用来构建项目
sit生命周期:用来建立项目站点

这里,顺便说一下什么是生命周期的阶段phase、插件的目标target:

生命周期阶段phase:拿clean生命周期来说,它包括pre-clean、clean、post-clean,这些已经规定好顺序的具体步骤,称为生命周期的phase。

插件目标target:maven生命周期的具体实现,都是绑定各种插件来实现的,而对于每插件来说,它的功能并不是只有一个,例如插件maven.resource.plugin,它有几个功能,对应的每个功能,称为插件目标。

每套生命周期的阶段phase如图中末节点所示,对应的每个阶段phase都可以绑定一个或多个插件的目标target。每套生命周期具体的每个阶段phase的执行,都是建立在前一个阶段phase的基础上的,例如clean生命周期,执行clean阶段时,pre-clean阶段一定是在这之前已经执行了的。

maven虽然规定了具体的生命周期及生命周期对应的阶段,但在构建maven项目的时候,默认不需要我们去一一指定构建时具体的阶段要对应哪个插件目标,maven默认在生命周期内置绑定插件的目标。

比如执行mvn clean install指令时,默认绑定的插件具体内容如下,冒号前对应插件前缀,冒号后对应插件的目标:
maven-clean-plugin:clean 清除上一次构建时生成的目标文件
maven-resources-plugin:resources 复制项目资源文件
maven-compiler-plugin:compiler 编译项目源代码
maven-resources:testResources 复制项目测试资源文件
maven-compiler:testCompiler 编译项目测试代码 
maven-surefire-plugin:test 执行测试单元
maven-jar-plugin:jar 打成jar包
maven-install-plugin 将jar包发布到本地仓库

从插件的目标,我们也可以看到对应的执行阶段,具体的如下:clean生命周期的pre-clean 、clean 、post-clean,default生命周期的validate至install所有阶段。

1.2如何自定义绑定插件目标到生命周期phase

如下,在pom.xml配置文件中自定义配置,如下,指定插件在对应的生命周期阶段生成项目源码包



    org.apache.maven.plugins
    maven-source-plugin
    3.0.1
    
        
            attach-source
            verify
            
                jar-no-fork
            
        
    

附:很多时候,我们不知道插件的功能目标是什么,可以通过如下命令查看插件的详细信息,例如所包含的目标,及目标的说明或插件的参数:
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1 -Ddetail

help:全名为maven-help-plugin,也是maven的一个插件

describe:插件的目标

-Dplugin:maven的参数标识,后面的内容指定参数为插件的坐标

-Ddetail:maven的参数标识,指输出具体的信息。


二、maven依赖范围dependency scope

1、与之密切关联的三种classpath:编译classpath、测试classpath、运行classpath
2、几种依赖范围
compiler 编译依赖范围,默认使用范围,对三种classpath都有效
test 测试依赖范围,只对测试classpath有效,在编译或运行时无法使用此依赖
provided 已提供依赖范围,在编译和测试时有效,运行时无效
runtime 运行时依赖范围,测试和运行classpath有效,编译主代码时无效
system 系统依赖范围,与provided一样,但可以使用system依赖范围时,必须用systemPath指定依赖文件路径
import 导入依赖范围,该范围不会对三种classpath产生影响

maven依赖的传递原则:
1、传递路径短的优先
2、传递路径一样,则先声明者优先

可选依赖:
不会受依赖传递性影响,如果引用可选类型的依赖,需要显示声明

排除依赖

    

归类依赖:

    <自定义标签>content

三、maven仓库

pom.xml配置依赖远程仓库:


    
        
        
        
        
            true/false
        
        
            true/false
        
        default
    

setting.xml配置仓库认证信息(必须配置在setting.xml文件中):


    
        
        
        
        

这里id必须与pom中需要认证的repository元素的一致,才能将认证信息与仓库配置联系在一起。

pom.xml配置部署远程仓库:


    
        
        
        
    
    
        
            
                        
        
    

附:repository:表示发布版本构造的仓库。snapshotRepository:表示快照版本发布的仓库
配置完后,执行发布的命令:mvn clean deploy

Apache插件网址:
http://maven.apache.org/plugins/index.html

pom.xml文件中配置插件远程仓库:


    
        
        
        
        false/true
        
            never
        
    

四、maven聚合

将两个或多个项目模块聚合到一个项目下,一般情况下,会创建一个聚合模块,该模块与其它被聚合的模块是父子关系(其实也可以是平级关系,如果是平级的话,module的路径则要相应的调整),步骤如下:

1、创建一个文件夹,并命名(此名字一般为等下要创建的POM文件的artifactId一致),做为聚合模块的项目目录,
然后把要被聚合的模块放到该文件夹下,并在文件夹下新建一个pom.xml文件,其配置如下:



    4.0.0
    
    framework.organizemanager
    organizemanager
    1.0.0-SANPSHOT
    pom
    framework organizemanager

    
    
        organizemanager-dao
        organizemanager-service
    

groupId:和要被聚合的模块的groupId一样
artifactId:做为聚合项目的项目名,与模块名必须不一样
version:可与其它模块一样
packaging:这前创建的maven项目,打包方式多数是jar、war,而做为聚合模块的项目,这里要用pom
name:可选
modules:要聚合所有项目模块的总标签
module:具体要聚合的项目模块标签,标签内所填内容,即为所聚合的模块的项目目录名,一般项目目录名与模块的artifactId一致
2、在聚合模块(即刚新建的文件夹)的根目录下执行mvn clean install

五、maven继承

一个maven项目,会有多个maven模块,因此,每个模块,也会对应一个pom,每个pom引用的依赖包或使用的插件,都可能会有重复性的操作,通过继承,能更好的减少配置的冗余,提高项目的依赖管理集中性,也能让不同模块,在同一项目中尽量保持同版本的依赖包。
父级pom:
    
    
    
    pom
    
子模块pom:
    
        
        
        
         
    

 relatevePath:默认路径是 ../pom.xml

 反应堆:
 对于聚合模块来说的,对聚合的模块的一个执行顺序,它会根据各个模块的pom文件,先执行pom里面的引用模块,再执行本身模块。
 反应堆裁剪:
 -pl :构建指定的模块 mvn clean install -pl organizemanager-dao
 -am :构建模块的依赖模块 mvn clean install -pl organizemanager-dao -am
 -adm :同时构建依赖于指定模块的模块 mvn clean install -pl organizemanager amd
 -rf :从指定的模块回复反应堆,即从反应堆构建顺序的基础上指定从哪个模块开始构建 mvn clean install -pl organizemanager -amd -rf organizemanager-service

 六、maven测试

 测试插件:maven-surefire-plugin
 如何跳过测试的几种方式如下: 
 1、命令模式:mvn package -DskipTest
 2、Pom配置模式:


    org.apache.maven.plugins
    maven-compiler-plugin
    2.5
    
        true
    

3、跳过测试代码的编译:mvn package -Dmaven.test.skip = true

附:参数maven.test.skip同时控制了maven-compiler-plugin和maven-surefire-plugin
 
如何执行单元测试 :

1、指定测试单元执行测试:
 mvn test -Dtest = HelloWorldTest
 2、模糊匹配指定
 mvn test -Dtest = Hello*Test
3、 指定多个测试单元执行测试
 mvn test -Dtest = HelloWorldTest,SecurityTest
 如果执行mvn test -Dtest命令时,没有找到任何测试单元,则会报错,如要不报错,可加-DfailIfNoTests=false,完整示例如下:
 mvn test -Dtest -DfailIfNoTests=false

七、maven开启资源目录过滤

 该功能主要能过maven-resources-plugin插件来实现,具全如下配置:
1、在build标签下标置于需要过滤的资源文件夹路径,并设置filtring标签内容为true,用来指定哪里的资源内容(如/resource/db.properties文件里的内容)需要被pom文件里的profile标签内容替换。


 
    
        
            ${project.basedir}/src/main/resources
            true
        
    
    
    
        
            ${project.basedir}/src/test/resources
            true
        
    

2、在project标签下配置profile标签,profile中属性properties下的子标签命名和资源文件中待替换标识符一致,
而properties下子标签的内容,即是要替换到资源文件中的最终内容,如下:


    
        dev
        
            com.mysql.jdbc.Driver
            jdbc:mysql://127.0.0.1:3306/platform
            root
            dev-pwd
        
    
    
        test
        
            com.mysql.jdbc.Driver
            jdbc:mysql://127.0.0.1:3306/platform
            root
            dev-pwd
        
    

3、执行maven指令,mvn clean install -Pdev

-P:是用来启动profile文件过滤的,而dev,是指定使用profiles下id为dev的profile集合配置

如果有多个profile配置,可提定maven激活具体某个profile,指定的方式有几种,如下:
1、命令行激活
mvn clean install -Pdev,-Ptest
2、settings文件显示激活,让配置的profile对于所有项目都处于激活状态

    
        dev
    


3、系统属性激活,当系统某个属性存在时,则自动激活profile

    
        
            
                test
            

        

    


4、文件是否存在激活

    
        
            
                x.properties
                y.properties
            

        

    


5、用户默认激活

    
        dev
        
            true
        

    

列出项目中例用的avtive
mvn help:active-profiles
mvn help:all-profiles

maven过滤web资源
1、配置profile



    client-a
    
        a.jpg
        red
    

2、配置插件maven-war-plugin


    org.apache.maven.plugins
    maven-war-plugin
    2.1-beta-1
    
        
            
                true
                src/main/webapp
                
                    <**/*.css/include>
                    <**/*.js/include>
                
            
        
    

3、执行maven命令,mvn clean install -Pclient-a

你可能感兴趣的:(maven)