Maven是一个采用纯Java编写的开源项目管理工具
, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,那么什么意思呢?POM指的是工程对象模型,即把工程当做对象来进行管理,所有的项目配置信息都被定义在一个叫做POM.xml的文件中,通过该文件Maven可以管理项目的整个生命周期,包括清除、编译,测试,报告、打包war、部署等等。
使用maven构建的项目有两个特点:
----依赖管理
简单点说就是直接
通过pom.xml配置文件把各个分散的项目自动的关联起来
,而不用我们程序员去手动地管理和维护这些项目(包括jar)之间依赖,这就是maven的第一个特点依赖管理。(图2)
----项目自动构建
项目构建是部署阶段的事,主要是指把开发人员写好的代码进行打包(打成war,web项目只要打包成war包才能部署使用),
当然这个过程不仅仅只是一个打包,其中包含了清除,编译,测试,报告,这个过程就是项目构建过程。
但是交给maven这些的动作包括package,maven都自动会帮你做好。而不用我们手动去做,这就是maven项目的第二个特点项目自动构建。
先解决ABC三个模块之间的依赖问题,然后使用父工程统一管理和维护这ABC三个模块(聚合),只要在对应pom.xml文件中进行配置就行,不需要我们手动去维护这些关系。
1 安装:
安装maven之前,需要安装JDK,maven才能运行。
配置环境变量:M2_HOME=maven的安装路径 path=%M2_HOME%/bin
测试:echo %M2_HOME% mvn -v
2 目录:
bin :包含maven运行的脚本
boot:使用包含的框架加载自己的类库
conf:配置setting.xml文件
lib:包含了所有运行maven的Java类库(本身类和第三方依赖)
LICENSE:许可证
NOTICE:包含的第三方软件。
3 pom.xml
groupid,artifactid,version是一个项目最基本的坐标
groupid:公司为google,项目名称为cmmd,则,groupid为:com.google.cmmd
artifactid:子项目id, cmmd-main, cmmd-util , cmmd-web;通常为所在模块名称,如果整个下面下
的pom,则为项目名称
version:1.0-SNAPSHOT:快照,正在开发的版本 ; 2.0
name:名称
packageing: 定义了打包方式
classifier:附属构建的坐标。由附加的插件帮助生成,不能直接定义。
scope:依赖范围,如果为test,表示该依赖只对测试有效。在正式代码中,不能被引用。默认为
compille,表示对主代码和测试代码都有效。
<dependencies> //包含多个依赖
<dependency> //标明一个依赖
<dependency/>
...
<dependency>
<dependency/>
<dependencies/>
build plugins plugin:定义maven的插件
4 命令
命令为maven的插件
mvn clean:清理target目录
mvn clean compile:编译项目主代码到target/classes
mvn clean test:执行测试程序
mvn clean package:打包,默认生成jar文件,名称遵循artifactid-version.jar;执行时,先执行编译测
试等工作,然后利用jar插件的jar目标执行打包操作
mvn clean install:包会被放在本地仓库中给其他maven项目使用。
执行下一个时,会执行上面所有命令。
mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate 构建maven项目骨架
5 基本知识点:
maven中央仓库:
http://repo1.maven.org/maven2/
maven是跨平台的
maven本身是分模块开发的,因此用户能看到如mavn-core-3.0.jar maven-model-3.0.jar文件
运行mvn命令实际上是执行了Java命令
maven安装目录/conf/setting.xml 设置的是全局范围;.m2/setting.xml范围是当前用户有效
maven的核心是pom.xml文件
没有任何实际的Java代码,就能定义一个maven项目的pom,这体现了maven的一大优点,
能最大程度让项目对象模型与实际代码独立,即解耦。
mavn会主动寻找项目主代码存放的位置:src/main/java /com.google.cmmd
项目
主代码存放的位置
:src/main/java
项目
测试码存放的位置
:src/test/java
pom配置完成后,maven会自动去中央仓库下载包。
pom永远在项目的根目录下。
使用archetype插件创建maven项目的骨架
maven项目存在
模块的概念,因此一个项目往往会被划分成很多个模块。
编译,测试,运行时会用到不同的calsspath。scope即定义这种jar包的依赖的。
提供了依赖传递的机制。
maven在用war方式打包的时候会根据POM的配置从本地仓库复制相应的jar文件到war包中。
Archetype插件会根据我们提供的信息创建项目骨架。
自动化部署。
web.xml中配置:
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
ContextLoaderListener为ServletListener,用来为web项目启动spring的IOC容器。
<context-param>
<param-name>
contextConfigLocation
</param-name>
<param-value>
classpath:spring/spring-context.xml
</param-value>
</context-param>
contextConfigLocation的context-param用来指定Spring配置文件的位置。