学习maven。仅仅要知道pom、dependency、coordination就能够了,剩下的就是学习一个一个的plugin的Goal



配置maven
export MAVEN_HOME=/home/matthewi/software/maven-3.3.3
export PATH=$PATH:$MAVEN_HOME/bin

主要命令

mvn help:system       初始化仓库
mvn clean package   清空target,打包

mvn package            打包,根据项目生成 jar 、war等文件


mvn clean package -DskipTests   打包前跳过測试
mvn eclipse:eclipse     生成 Eclipse 项目文件
mvn compile :编译源码
mvn test-compile :编译測试代码 
mvn test : 执行应用程序中的单元測试 
mvn clean :清除目标文件夹中的生成结果
mvn jetty:run       执行
mvn install:install-file -Dfile=/home/matthewi/share/CCP_REST_SMS_DEMO_JAVA_v2.6r/CCP_REST_SMS_DEMO_JAVA_v2.6r/sdk/lib/httpclient.jar -DgroupId=ytx -DartifactId=org.apache.http -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true
       第三方库,在公共库里肯定没有。能够使用install加入到本地maven仓库里,然后正常引用就能够了


參数

-DskipTests        跳过測试
-Dfindbugs.skip=true    跳过findbug
-Denforcer.skip=true

内置变量
${basedir} 项目根文件夹
${project.build.directory} 构建文件夹,缺省为target
${project.build.outputDirectory} 构建过程输出文件夹。缺省为target/classes
${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}
${project.packaging} 打包类型。缺省为jar
${project.xxx} 当前pom文件的随意节点的内容



dependencyManagement主要目的是管理多个子项目中对同一个依赖包的版本保持一致,不会真实的引入
Maven 使用dependencyManagement 元素来提供了一种管理依赖版本的方式。

一般会在一个组织或者项目的最顶层的父POM 中看到dependencyManagement 元素。使用pom.xml 中的dependencyManagement 元素能让全部在子项目中引用一个依赖而不用显式的列出版本。

Maven 会沿着父子层次向上走。直到找到一个拥有dependencyManagement 元素的项目。然后它就会使用在这个dependencyManagement 元素中指定的版本。


比如在父项目里:
<dependencyManagement>  
<dependencies>  
<dependency>  
<groupId>mysql</groupId>  
<artifactId>mysql-connector-java</artifactId>  
<version>5.1.2</version>  
</dependency>  
...  
<dependencies>  
</dependencyManagement>  
然后在子项目里就能够加入mysql-connector时能够不指定版本。比如:
<dependencies>  
<dependency>  
<groupId>mysql</groupId>  
<artifactId>mysql-connector-java</artifactId>  
</dependency>  
</dependencies>  
这样做的优点就是:假设有多个子项目都引用同一样依赖,则能够避免在每一个使用的子项目里都声明一个版本号号,这样当想升级或切换到还有一个版本号时,仅仅须要在顶层父容器里更新,而不须要一个一个子项目的改动 ;另外假设某个子项目须要另外的一个版本号,仅仅须要声明version就可。

dependencyManagement里仅仅是声明依赖,并不实现引入,因此子项目须要显式的声明须要用的依赖。

dependencies
相对于dependencyManagement,全部声明在dependencies里的依赖都会自己主动引入,并默认被全部的子项目继承。

pluginManagement和dependencyManagement类似,也是为了统一管理版本号。


生命周期

Maven有三套相互独立的生命周期,各自是clean、default和site。每一个生命周期包括一些阶段(phase),阶段是有顺序的。后面的阶段依赖于前面的阶段。
1、clean生命周期:清理项目,包括三个phase阶段。

1)pre-clean:运行清理前须要完毕的工作
2)clean:清理上一次构建生成的文件
3)post-clean:运行清理后须要完毕的工作
2、default生命周期:构建项目,重要的phase阶段例如以下。
1)validate:验证project是否正确,全部须要的资源是否可用。
2)compile:编译项目的源码。

3)test:使用合适的单元測试框架来測试已编译的源码。这些測试不须要已打包和布署。
4)Package:把已编译的代码打包成可公布的格式,比方jar。

5)integration-test:如有须要,将包处理和公布到一个可以进行集成測试的环境。
6)verify:执行全部检查,验证包是否有效且达到质量标准。

7)install:把包安装到maven本地仓库,能够被其它project作为依赖来使用。
8)Deploy:在集成或者公布环境下运行。将终于版本号的包复制到远程的repository。使得其它的开发人员或者project能够共享。
3、site生命周期:建立和公布项目网站,phase阶段例如以下
1)pre-site:生成项目网站之前须要完毕的工作
2)site:生成项目网站文档
3)post-site:生成项目网站之后须要完毕的工作
4)site-deploy:将项目网站公布到server


插件
两种方式调用Maven插件目标。第一种方式是将插件目标与生命周期阶段(lifecycle phase)绑定。这样用户在命令行仅仅是输入生命周期阶段而已,比如Maven默认将maven-compiler-plugin的compile目标与 compile生命周期阶段绑定。因此命令mvn compile实际上是先定位到compile这一生命周期阶段,然后再依据绑定关系调用maven-compiler-plugin的compile目标。另外一种方式是直接在命令行指定要运行的插件目标,比如mvn archetype:generate 就表示调用maven-archetype-plugin的generate目标。这样的带冒号的调用方式与生命周期无关。


Maven为实现高速构建、有一套内置的插件绑定

三套生命周期的插件绑定详细例如以下(事实上是各个生命周期阶段与插件的目标的绑定)(这些插件不须要自己手动写到pom文件里)当中default生命周期的构建方式会其打包类型有关、打包类型在POM中<packaging>packageType</packaging>指定、一般有jar、war两种类型、以下是 经常使用的jar的构建过程


clean生命周期
pre-clean        
clean                      maven-clean-plugin:clean
post-clean
site生命周期
pre-site
site:                      maven-site-plugin:site
post-site
site-deploy:              maven-site-plugin:deploy
default生命周期
process-resources          maven-resources-plugin:resources
compile                    maven-compiler-plugin:compile
process-test-resources     maven-resources-plugin:testResources
test-compile:              maven-compiler-plugin:testCompile
test:                      maven-surefire-plugin:test
package                    maven-jar-plugin:jar
install:                   maven-install-plugin:install
deploy:                    maven-deploy-plugin:deploy

Maven够用就好的更多相关文章

  1. 学Maven,这篇万余字的教程,真的够用了!

    1 Maven 介绍 1.1 为什么使用 Maven 由于 Java 的生态非常丰富,无论你想实现什么功能,都能找到对应的工具类,这些工具类都是以 jar 包的形式出现的,例如 Spring,Spri ...

  2. IDEA的一个设置, 关系到maven的运行, 默认是使用jre的, 有时候不够用需要改成jdk

  3. Maven实战:Maven生命周期

    前言 之前有写过一篇文章Maven实战,介绍了Maven的一些基本概念,以及对于一个初学者而言的Maven基础知识,当时在我看来掌握了这些基本是够用的. 随着工作的深入,越来越感觉对于Maven的理解 ...

  4. Maven的POM.xml配置大全

    <?xml version="1.0" encoding="utf-8"?> <project xmlns="http://mave ...

  5. maven学习(上)- 基本入门用法

    一.下载及安装 1.1 下载maven 3.1.1 先到官网http://maven.apache.org/download.cgi 下载最新版本(目前是3.1.1 ),下载完成后,解压到某个目录(本 ...

  6. 史上最全的maven的pom.xml文件详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  7. Maven的pom.xml 配置详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  8. Maven配置详见

    CSDN 2016博客之星评选结果公布    [系列直播]零基础学习微信小程序!      "我的2016"主题征文活动   博客的神秘功能 maven 配置详解 标签: mave ...

  9. Maven项目中的pom.xml详解【转】

    什么是pom? pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url, ...

随机推荐

  1. Multiplication Game(博弈论)

    Description Alice and Bob are in their class doing drills on multiplication and division. They quick ...

  2. spring in action 学习笔记二:aop的理解

    一: aop的思想的来在哪里? 一个系统一般情况下由多个组件组成,而每一个组件除了干自己的本职工作以外,有时还会干一些杂活(如:日志(logging).事务管理(transaction manager ...

  3. Linux命令之type,whatis,whereis,which,locate,find

    第一个:type--查询一个命令的类型 -查询一个命令为内部或者外部命令的命令: -linux的众多命令中,有内部命令和外部命令,这时可以用type命令来查询一个命令到底是属于内部命令还是属于外部命令 ...

  4. ES6特性以及代码demo

    块级作用域let if(true){ let fruit = ‘apple’; } consoloe.log(fruit);//会报错,因为let只在if{ }的作用域有效,也就是块级作用域 恒量co ...

  5. struts2 json 输出日期格式不正确

    struts2 输出json中 日期出现:2013-12-17T15:57:47 错误格式的数据 原因:struts2 json插件对日期的格式化有问题 解决方法:在实体类的日期的get方法上加注解: ...

  6. JavaScript js 兼容浏览器问题 兼容Fire

    做BS开发就难免会用到javascript,而每个浏览器对javascript的支持有不同.这就需要我们程序员去兼容他们,不然有些浏览器就无法运行我们的代码.就会造来客户的投诉,如果让BoSS知道了, ...

  7. [BZOJ1069][SCOI2007]最大土地面积 凸包+旋转卡壳

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3669  Solved: 1451[Submit][Sta ...

  8. flow JavaScript 静态类型检查工具

    内置类型 flow 内置类型有 boolean, number, string, null, void, any, mixed, literal type. 其中 boolean, number, s ...

  9. poj2774(最长公共子串)

    poj2774 题意 求两个字符串的最长公共子串 分析 论文 将两个字符串合并,中间插入分隔符,在找最大的 height 值的时候保证,两个字符串后缀的起始点分别来自原来的两个字符串. code #i ...

  10. #417 Div2 E (树上阶梯博弈)

    #417 Div2 E 题意 给出一颗苹果树,设定所有叶子节点的深度全是奇数或偶数,并且包括根在内的所有节点上都有若干个苹果. 两人进行游戏,每回合每个人可以做下列两种操作中的一种: 每个人可以吃掉某 ...