Maven


maven概述

maven基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的项目管理工具。
groupId是项目的包名
artifactId是模块名,只有一个项目时是项目名


maven构建命令

mvn -v 查看maven版本
mvn compile 编译项目
mvn test 测试
mvn package 打包项目

mvn clean 删除target目录下的文件
mvn install 安装jar到本地仓库repository


maven自动构建目录骨架

archetype插件,创建服务maven规定的目录骨架

创建项目文件夹后,mvn archetype:generate 按照提示进行选择的交互式创建方式

一键创建:archetye:generate -DgroupI=组织名(通常是公司网址的反写+项目名) -DartifactI=项目名 -Dversion=版本号 -Dpackage=代码所存在的包名

java 项目构建:mvn archetype:generate -DgroupId=cn.luxh.app -DartifactId=my-web-app -DarchetypeArtifactId=maven-archetype-webapp -DinteractivMode=false

web项目构建:mvn archetype:generate -DgroupId=cn.luxh.app -DartifactId=my-web-app -DarchetypeArtifactId=maven-archetype-webapp -DinteractivMode=false


maven的坐标和仓库

maven中,构件通过坐标作为其唯一标识。groupId、artifactId、version组成了坐标

仓库分为本地仓库和远程仓库。
远程仓库的默认地址在lib的maven-model-builder-3.5.2中pom-4.0.0.xml,全球超级仓库,所有pom的超级类:https://repo.maven.apache.org/maven2

镜像仓库(setting.xml文件150行处):配置mirror


maven的生命周期

完整的项目构建过程包括:清理、编译、测试、打包、集成测试、验证、部署

maven的三套相互独立的生命周期:clean 清理项目、 default 构建项目、 site生成项目站点

1、clean 清理项目阶段:pre-clean执行清理前的工作,clean清理上一次构建生成的所有文件,post-clean执行清理后的文件

2、default 构建项目阶段:compile、test、package、install。运行package时自动执行compile和test

3、site 生成项目站点阶段:pre-site、site生成项目的站点文档、post-site、site-deploy发布生成的站点到服务器上


maven核心管理文件pom.xml



    
    4.0.0

    com.mq.test
    mq-test
    1.0.0
    war
    项目名
    http://www.lufax.com
    项目描述
    
    
    

    
        
            org.apache.activemq
            activemq-all
            5.9.0
        

        
            junit
            junit
            4.12
            
            test
            true
            
        
    

    
        

        
    

    
        
            
                org.apache.maven.plugins
                maven-source-plugin
                2.4
                
                    
                        package
                        
                            jar-no-fork
                        
                    
                
            
        
    

    
    

    


  -project根元素,包括约束信息

  --modelVersion固定版本,指定了当前pom的版本

  --groupId反写的公司网址+项目名
  --artifactId实际的项目名+模块名
  --version第一个0表示大版本号/第二个0表示分支版本号/第3个0表示小版本号
  --packaging打包方式,组成坐标信息。
  --version:snapshot快照版本,alpha内测版本,beta公测版本,release稳定版本,GA正式版本
  --packaging:默认为jar,还可以为war、zip、pom

  --name项目描述名,一般为产生项目文档时使用
  --url项目地址
  --description项目描述
  --developers开发人员列表
  --licenses许可证
  --organization组织信息


  --dependencies依赖列表,可包含多个依赖项dependency
  ---groupId、artifactId、version坐标
  ---type类型
  ---scope依赖范围,例如junit只在test时有用
  ---optional设置依赖是否可选,默认为false
  ---exclusions排除依赖的列表


  --dependencyManagement依赖管理,包含多个dependencies。不会被运行,即不会使用到实际的依赖中。该标签多定义在父模块中,供子模块继承使用。例如多个模块都使用到junit,可以抽象一个父类模块,在父模块中对junit定义,然后子模块只需要继承即可。


  --build对构建行为提供相应支持
  ---plugins插件列表,包含多个plugin

  --parent在子模块中对父模块的pom进行继承

  --modules聚合运行的多个maven模块,一起编译

maven依赖范围scope

开发时使用某个框架,需要将该框架引入到classpath中。maven提供三种classpath:编译、测试、运行,所以scope是控制依赖和三种classpath的关系。

dependency scope:compile、provided、runtime、test、system、import

compile是默认值,对编译、测试、运行都有效
provided对编译、测试有效
runtime在测试、运行时有效。如jdbc
test只在测试范围有效,如junit
system与本机系统有关,如java_home
import是导入的范围,只使用啊dependencyManagement中,表示从其他的pom中继承过来的依赖


maven依赖传递

依赖传递传递后,external libraries中可看到;可通过exclusion消除传递依赖。
setting.xml中可定义jdk版本,默认显示为1.5


maven依赖冲突

原则:短路优先。如果路径长度相同,谁先声明,先解析谁。


maven聚合和继承

聚合:多个模块一起install。创建一个maven项目,pom.xml中,修改packaging为pom,依次添加多个module。clean并install之后,本地仓库中有多个编译后的jar

继承:将共同的特性抽出来,放到一个parent module中,如junit。创建一个parent maven项目,修改packaging为pom,pom.xml中,将junit的dependency放到dependencyManagement中。parent module中的src和test没什么作用,可删除。

子module继承:添加parent标签,引入父module的坐标,删除junit的version和scope,即完成junit从父module继承。


作者 @salome
2018年 01月 11日

你可能感兴趣的:(Maven)