Maven 架构搭建的命令行及学习笔记
==================================================
1.配置环境变量:
说明:
系统环境变量和用户变量的区别
搭建编译环境时为什么有时候要设置环境变量,而有时又设置用户变量?
环境变量分为系统环境变量和用户环境变量。
你所说的环境变量是指系统环境变量,对所有用户起作用
而用户环境变量只对当前用户起作用。
例如你要用java,那么你把java的bin目录加入到path变量下面,那么它就是系统环境变量,所有用户登陆,在命令行输入java都会有java的帮助信息出来。而如果你在某个用户的变量下面新建一个变量,那么它就只对这个用户有用,当你以其他用户登陆时这个变量就和不存在一样。
2.如何查询环境环境变量:
C:\Users\Administrator>echo %M2_HOME%D:\java\apache-maven-3.2.3C:\Users\Administrator>mvn -vApache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-12T04:58:10+08:00)Maven home: D:\java\apache-maven-3.2.3Java version: 1.6.0_29, vendor: Sun Microsystems Inc.Java home: D:\java\JDK1.6\jreDefault locale: zh_CN, platform encoding: GBKOS name: "windows 7", version: "6.1", arch: "x86", family: "windows"C:\Users\Administrator>
----
3.Maven初始化执行mvn help:system查询环境参数,并且下载基本的maven到默认的~/m2设置的仓库。
系统会自动从中心库(如果配置代理服务器,或者nexus服务器)
下载maven-help-plugin插件。
其次获得环境信息,最后显示环境变量信息,(使用.....省略相关信息)
s/plexus-utils/1.5.7/plexus-utils-1.5.7.pom (8 KB at 8.2 KB/sec)Downloading: http://localhost:8081/nexus/content/groups/public/jdom/jdom/1.0/jdom-1.0.pomDownloaded: http://localhost:8081/nexus/content/groups/public/jdom/jdom/1.0/jdom-1.0.pom (2 KB at 1.8 KB/sec)......................................stream/xstream/1.4.3/xstream-1.4.3.jar (471 KB at 20.2 KB/sec)[INFO]======================================================================================================== Platform Properties Details =======================================================================================================================================================================================System Properties===============================================================================java.runtime.name=Java(TM) SE Runtime Environmentsun.boot.library.path=D:\java\JDK1.6\jre\binjava.vm.version=20.4-b02java.vm.vendor=Sun Microsystems Inc.java.vendor.url=http://java.sun.com/...............java.endorsed.dirs=D:\java\JDK1.6\jre\lib\endorsedos.arch=x86java.io.tmpdir=C:\Users\ADMINI~1\AppData\Local\Temp\line.separator=java.vm.specification.vendor=Sun Microsystems Inc.user.variant=os.name=Windows 7classworlds.conf=D:\java\apache-maven-3.2.3\bin\m2.confsun.jnu.encoding=GBK...............................sun.io.unicode.encoding=UnicodeLittlesun.cpu.endian=littlesun.desktop=windowssun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86===============================================================================Environment Variables===============================================================================CLASSWORLDS_JAR="D:\java\apache-maven-3.2.3\boot\plexus-classworlds-2.5.1.jar"TMP=C:\Users\ADMINI~1\AppData\Local\TempPROGRAMFILES(X86)=C:\Program Files (x86)COMPUTERNAME=PC201408041613OS=Windows_NTPROMPT=$P$G..........................................................HOME=C:\Users\AdministratorPROCESSOR_LEVEL=6ERROR_CODE=0SESSIONNAME=ConsoleUSERNAME=AdministratorPATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSCWINDOWS_TRACING_FLAGS=3PUBLIC=C:\Users\PublicPROCESSOR_REVISION=2505[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 03:18 min[INFO] Finished at: 2014-12-19T13:32:51+08:00[INFO] Final Memory: 5M/15M[INFO] ------------------------------------------------------------------------C:\Users\Administrator>
构造结束
3.1. Maven
3.1.1. Maven介绍
我们使用maven构建应用环境,因此我们先来简单介绍maven。Maven是什么?如何回答这个问题 要看你怎么看这个问题。 绝大部分Maven用户都称Maven是一个"构建工具":一个用来把源代码构建成可发布的构件的工具。构建工程师和项目经理会说Maven是一个更复杂 的东西:一个项目管理工具。那么区别是什么? 像Ant这样的构建工具仅仅是关注预处理,编译,打包,测试和分发,而 Maven 这样的一个项目管理工具提供了构建工具所提供功能的超集, 除了提供构建的功能,Maven还可以生成报告,生成Web站点,并且帮助推动工作团 队成员间的交流。
Maven目前最新版本是2.1.0. 因为maven2.0的版本与maven1.0相比完全是重新设计的,而且速度比以前更快,所以称为 maven2. 目前很多的开源项目都已经采用maven2构建,足见其流行好用的程度。 注:本指南中所提及的maven均指maven2。
3.1.2. Maven常用命令
mvn archetype:create :创建 Maven 项目
mvn compile :编译源代码
mvn test-compile :编译测试代码
mvn test : 运行应用程序中的单元测试
mvn site : 生成项目相关信息的网站
mvn clean :清除目标目录中的生成结果
mvn package : 依据项目生成 jar 文件
mvn install :在本地 Repository 中安装 jar
mvn eclipse:eclipse :生成 Eclipse 项目文件
mvn -Dmaven.test.skip=true : 忽略测试文档编译
3.2. POM
POM全称是Project Object Model,即项目对象模型。pom.xml是maven的项目描述文件,它类似与antx的project.xml文件。pom.xml文件以xml的 形式描述项目的信息,包括项目名称、版本、项目id、项目的依赖关系、编译环境、持续集成、项目团队、贡献管理、生成报表等等。总之,它包含了所有的项目 信息。
3.2.1. pom.xml的基本配置
4.0.0 org.codehaus.mojo my-project 1.0
modelVersion 描述这个POM文件是遵从哪个版本的项目描述符。
groupId 针对一个项目的普遍唯一识别符。通常用一个完全正确的包的名字来与其他项目的类似名字来进行区分(比如:org.apache.maven)。
artifactId 在给定groupID 的group里面为artifact 指定的标识符是唯一的 , artifact 代表的是被制作或者被一个project应用的组件(产出物)。
version 当前项目产生的artifact的版本
以上4个元素缺一不可,其中groupId, artifactId, version描述依赖的项目唯一标志。
3.2.2. pom.xml文件结构
4.0.0 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
project是pom.xml的根节点,至于其它元素请参考
3.2.3. POM很重要的3个关系
POM有3个很重要的关系:依赖、继承、合成。
3.2.3.1. 依赖关系
... junit junit 4.0 jar test true
如果想依赖一个maven库中没有的一个jar包,方法很简单,就是先将此jar包使用以下的命令安装到本地maven库中:
mvn install:install-file -Dfile=my.jar -DgroupId=mygroup -DartifactId=myartifactId -Dversion=1
再把依赖关系加进去即可。
3.2.3.2. 继承关系
另一个强大的变化, maven带来的是项目继承。
3.2.3.2.1. 定义父项目
4.0.0 com.mygroup my-parent 2.0 pom
packaging 类型,定义值为 pom用于定义为parent和合成多个项目。 当然我们创建的maven项目的pom都继承maven的super pom, 如果想看项目(父或子)的完全的pom结构,可以运行:
mvn help:effective-pom
就可以了。
3.2.3.2.2. 子项目配置
4.0.0 com.mygroup my-child-project com.mygroup my-parent 2.0 ../my-parent
relativePath可以不需要,但是用于指明parent的目录,用于快速查询。
3.2.3.3. 合成关系
一个项目有多个模块,也叫做多重模块,或者合成项目。 如下的定义:
4.0.0 com.mygroup my-parent 2.0 my-child-project1 my-child-project2
其中module 描述的是子项目的相对路径 。
3.2.4. dependencyManagement和Profile
Maven 还我们提供了一个dependencyManagement元素,用来提供了一种方式来统一依赖版本号。dependencyManagement元素一 般用在顶层的父POM。使用pom.xml中的dependencyManagement元素能让你在子项目中引用一个依赖而不用显式的列出版本号。 Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个 dependencyManagement元素中指定的版本号,这样就解决了修改依赖版本号不完全的问题。
Maven的Profile元素可以为一个特殊的环境自定义一个特殊的构建,使得不同环境间构建的可移植性成为可能。比如要使用 production profile来运行mvn install,你需要在命令行传入-Pproduction参数,这里production是profile的id。要验证production profile覆盖了默认的Compiler插件配置,可以像这样以开启调试输入(-X) 的方式运行Maven。