《Maven实战》徐晓斌 2011 机械工业出版社
一、介绍
1、名词
artifact:插件
极限编程XP
2、构建脚本:
maven——pom.xml(Project Object Model)
ant——build.xml
其基本结构是目标(target)、依赖(depends),以及实现目标的任务。
3、maven vs ant
Ant是过程式的,开发者显示指定每一个目标,以及完成该目标所需要执行的任务。
Maven是声明式的,项目构建过程和过程各个阶段所需的工作都由插件实现。
4、相关知识
Spring——实现IoC;
Hibernate——实现封装JDBC;
Eclipse安装目录eclipse.ini文件,添加vm配置指向jdk:
--launcher.SSMaxPermSize
256m
-vm
D:\java\jdk1.7\bin\javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms128m
-Xmx256m
m2eclipse——Eclipse下的Maven插件。
二、Maven使用入门
——以Hello World为例
1、mvn help:system——打印所有的Java系统属性和环境变量。
推荐用户复制M2_HOME/conf/settings.xml文件到~/.m2/settings.xml,在用户范围内修改Maven配置,而不是在全局范围修改。
Maven的核心是pom.xml,一个HelloWord项目的pom.xml:
参数解释:
modelVersion——POM模型的版本,对于Maven2以及Maven3来说,它只能是4.0.0
核心三元素——groupId、artifactId、version,定义了一个项目基本的坐标;在Maven的世界,任何的jar、pom或者war都是基于这些基本的坐标进行区分。
groupId:定义里项目属于哪个组,这个组往往和项目所在的组织或公司存在关联;
artifactId:定义了当前Maven项目在组中的唯一ID;
version:指定Hello World项目当前的版本,1.0-SNAPSHOT说明快照版本,处于开发中,不是稳定版本。
name:不是必须的,可用于声明一个友好的项目名称。
2、编写主代码
主代码:被打包到最终的构件,如jar中,默认位于src/main/java目录;
测试代码:只运行测试时用到,不会被打包,默认位于src/test/java目录;
使用Maven编译:
在项目根目录下,运行命令
mvn clean compile
clean:清理输出目录target/
compile:编译项目主代码
以上命令执行顺序:
clean:clean->resources:resources->compiler:compile
3、编写测试代码
添加junit测试依赖:
注:scope为依赖范围,test值表示只对测试有效,默认为compile,则表示对主代码和测试代码都有效。
测试代码:
典型单元测试的三个步骤:
(1)准备测试类及测试数据;
(2)执行要测试的行为;
(3)检查结果。
JUnit3中,约定所有需要执行测试的方法都以test开头
JUnit4中,需要执行的测试方法都应该以@Test进行标注
使用Maven执行测试:
运行mvn clean test
注意,以上命令实际执行了以下的任务:
clean:clean resources:resources compiler:compile resources:testResources compiler:testCompile.
详见maven生命周期。
以上命令可能提示java版本不够,compiler插件默认java1.3,需要做以下修改:
4、打包和运行
Pom默认打包类型为jar,执行命令进行打包:
mvn clean package
输出也位于target/输出目录中。
若让其他项目引用该jar,需要执行安装步骤,,将项目输出的jar安装到Maven本地仓库中:
mvn clean install
注意:执行test前会先执行compile,执行package前会先执行test,执行install前会执行package。
默认生成的jar是不能够执行运行的,因为main方法的类信息不回添加到manifest中。为了生成可执行的jar文件,需要借助maven-shade-plugin,配置插件如下:
5、使用Archetype生成项目骨架
Mav项目中基本的目录结构和pom.xml文件内容成为项目的骨架。
Maven提供了Archetype快速生成项目骨架。
Maven3中,运行以下命令:
mvn archetype:generate
接着根据提示输入项目groupId artifactId version package包名等