适合Java程序员管理Java项目。几乎成为了所有Java开源项目的标配。都是用maven进行管理项目。例如阿里巴巴和淘宝。 【开源工具】【自动化构建】【依赖管理】【规范高效地管理Java项目】 Maven的安装、配置和基本使用方法。 坐标和依赖、Maven仓库、生命周期和插件、聚合与继承等Maven核心概念。 系统性地阐述了使用Nexus建立私服、使用Maven进行测试、使用Hudson进行持续集成、使用Maven构建Web应用、Maven的版本管理、Maven的灵活构建、生成项目站点、和Maven的m2eclipse插件等实用性较强的高级知识。
陡峭的学习曲线和匮乏的文档,在博客中撰写文章。 ——Maven中文社区。 1:简要介绍 2-3:入门介绍 4:背景案例 5-8:核心概念,坐标,依赖,仓库,生命周期,插件,继承,多模块聚合。 9:使用Nexus建立私服,实际工作中使用maven。 10-16:高级且离散的知识点。测试,持续集成和Hudson、Web项目与自动化部署、自动化版本管理、智能适应环境差异的灵活构建,站点生成,eclipse插件。 17-18:如何编写Archeype和Maven插件。 第1章 Maven简介 何为Maven,为什么需要Maven。 跨平台的项目管理工具。Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。
1.1.1 何为构建 构建(build)是每一位程序员每天都在做的工作。从源码库中签出最新的源码,然后进行单元测试。测试覆盖率报告。 除了编写源代码,每天有相当一部分时间花在了编译、运行单元测试、生成文档、打包和部署等繁琐且不起眼的工作上,这就是构建。有人用软件的方法让这一系列工作完全自动化、使得软件的构建像全自动流水线一样,只需要一条简单的命令,所有烦琐的步骤都能够自动完成,很快就能得到最终结果。
1.1.2 Maven是优秀的构建工具 自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。 Maven是跨平台的。 我们一直在不停地寻找避免重复的方法:设计的重复,编码的重复,文档的重复,当然还有构建的重复。 ——Maven最大化地消除了构建的重复,抽象了构建生命周期,并且为绝大部分的构建任务提供了已经实现的插件。 ——自动化执行遵循Maven的约定编写好的测试用例。 ——帮助我们标准化构建过程,所有项目的构建命令都是简单一致的。避免了不必要的学习成本。有利于促进项目团队的标准化。 优秀的流行的构建工具:自动化构建,抽象构建过程,提供构建任务实现,跨平台对外提供一致的操作接口。
1.1.3 Maven不仅仅是构建工具 还是一个依赖管理工具和项目信息管理工具。它提供了中央仓库,能帮我们自动下载构件。 开源的年代,几乎任何Java应用都会借用一些第三方的开源类库。通过依赖的方式引入到项目中来。随着依赖的增多,版本不一致、版本冲突、依赖臃肿等问题接踵而来。 Maven提供一个坐标系统准确的定位每一个构件(artifact),通过一组坐标,Maven能够找到任何一个Java类库。有序管理依赖,解决繁杂的依赖问题。 帮助我们管理原本分散在项目中各个角落的项目信息:项目描述,开发者列表,版本控制系统地址,许可证,缺陷管理系统地址。节省了大量寻找信息的时间。除了直接的项目信息,通过Maven自动生成的站点,以及一些已有的插件,我们还能够轻松获得项目文档、测试报告、静态分析报告、源码版本日志报告等非常具有价值的项目信息。 ——Maven还为全世界的Java开发者提供了一个免费的中央仓库,在其中几乎可以找到任何的流行开源类库。 通过Maven的衍生工具(如Nexus),我们还能对其进行快速地搜索。只要定位了坐标,Maven就能够帮我们自动下载。 约定优于配置:Maven对于项目目录结构、测试用例命名方法等内容都有既定的规则。只要遵循这些成熟的规则,用户在项目间切换的时候就免去了额外的学习成本。
1.2 为什么需要Maven 其他构建管理的解决方法:IDE,Make和Ant。 使用脚本建立高度自定义的构建系统就像买组装PC,费时耗力结果也不一定好。虽然你可以享受从无到有的乐趣。 1.2.2 IDE不是万能的 优秀的IDE可以大大提供开发效率,都提供了强大的文本编辑、测试甚至重构功能。 ——IDE依赖大量的手工操作。编译、测试、代码生成等工作都是相互独立的,很难一键完成所有工作。手工劳动往往意味着低效,意味着容易出错。 ——很难在项目中统一所有的IDE配置。 我们可以在IDE中方便地运行Maven执行构建。
1.2.3 Make 最早的构建工具。强大在于:利用所有系统的本地命令。尤其是Linux系统中丰富的功能和强大的命令,帮助Make快速高效地完成任务。 Make语法格式的基本组成部分: 一系列规则(rules),每一条规则又包括目标(Target)依赖(Prerequisite)和命令(Command) 但是由于Make将自己和操作系统绑定在一起,就不能实现跨平台的构建,这对于Java来说是很不友好的。Makefile语法对于空格或Tab问题。
1.2.4 Ant 另一个整洁工具:Another Neat Tool。最早用来构建著名的Tomcat。 Ant是一个Java版本的Make,使用XML定义构建脚本。构建脚本:build.xml 基本结构也是目标target,依赖depends,以及实现目标的任务。 Ant是过程式的,开发者显式定义每一个目标以及要完成该目标所需要执行的任务。针对每一个项目都要重新编写这一过程,隐含着大量的重复。 Maven是声明式的,项目构建过程和过程各个阶段所需的工作都由插件实现,并且大部分插件都是现成的,开发者只需要声明项目的基本元素,Maven就执行内置的完整的构建过程。
Ant是没有依赖管理的。可以通过Ivy管理依赖。而Maven内置了依赖管理,而且有一个Java开源软件包的中央仓库。
1.2.5 不要重复发明轮子 Jar包的版本错误和版本冲突问题。这些依赖需要一个框架或者系统来进行管理。 Ant打包: 创建目录、复制文件、编译源代码、使用一些任务(copydir/fileset/classpath/ref/target)、打包(jar/zip/war)
1.3 Maven与极限编程 极限编程:拥抱变化。 Maven的特点: Maven暴露一组一致、简洁的操作接口 与版本控制系统结合 自动生成项目报告 测试驱动开发(测试是Maven生命周期重要组成部分) 十分钟构建:清理、编译、测试、打包、部署、得到产品。 持续集成:强调项目以很短的周期集成最新的代码。CI的前提是源码管理系统和构建系统。 富有信息的工作区。 自动化构建系统: 节省很多手动的测试时间。 建议:尽早使用构建系统,集成团队的代码。
Maven核心插件: 都设定了稳定版本。 |
第2章 Maven的安装和配置 20140918 2.1 在Windows上安装Maven 笔记本电脑中:
2.2 在基于UNIX的系统上安装Maven 略过
2.3 安装目录分析 2.3.1 M2_HOME bin: mvn运行的脚本,这些脚本用来配置Java命令,准备好ClassPath和相关的Java系统属性,然后执行Java命令。 mvnDebug文件中只是比mvn多了MAVEN_DEBUG_OPTS选项。 m2.conf文件是classworlds的配置文件。 boot: 只有一个文件plexus-classworlds-2.5.1.jar。类加载器。 conf: settings.xml,全局定制Maven的行为。 lib: 包含Maven运行时需要的Java类库。 2.3.2 ~/.m2 该目录下的repository仓库:Maven本地仓库。 Maven根据一套规则来确定任何一个构件在仓库中的位置。 2.4 设置HTTP代理 2.5 安装m2eclipse 2.7 Maven安装最佳实践 运行Maven命令实际上是执行了Java命令。 MAVEN_OPTS环境变量:Maven运行所需内存设置。-Xms |
第3章 Maven使用入门
本章内容
编写POM,编写主代码,编写测试代码,打包和运行,使用Archetype生成项目骨架,m2eclipse简单使用。
3.1 编写POM
P46
POM,Project Object Model,项目对象模型、定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
第一行:XML头,指定了该xml文档的板式和编码方式。
modelVersion指定当前POM模型的版本。
项目的基本的坐标:
——groupId定义项目属于哪个组。com.mycom.myapp
——artifactId当前Maven项目在组中的唯一ID
——version
让项目对象模型最大程度地与实际代码相独立。
在POM稳定后,日常的Java代码开发基本不涉及POM的修改。
3.2 编写主代码
src/mian/java目录。
compile任务:将项目主代码编译至target/classes目录。
3.3 编写测试代码
src/test/java目录。
上述代码添加了依赖,自动下载junit-4.7.jar。
中央仓库:http://repol.maven.org/maven2/。
最后使用Junit框架的Assert类检查结果是否为正确的。
需要执行的测试的方法都应该以@Test进行标注。
执行测试之前,先自动执行项目主资源处理、主代码编译、测试资源处理、测试代码编译等工作。
3.4 打包和运行
Maven主要的命令:mvn clean compile,mvn clean test,mvn clean package,mvn clean install
P53 生成可执行的jar文件。
3.5 使用Achetype生成项目骨架
我们称基本的目录结构和pom.xml文件内容为项目的骨架。
快速勾勒出项目骨架。
命令:mvn archetype:generate。实际上是在运行maven-archetype-plugin。
3.6 m2eclipse简单使用
第4章 背景案例 本章内容: 简单的账户注册服务。需求阐述。简要设计。小结。P63
4.1 简单的账户注册服务
4.2 需求阐述 4.2.1 需求用例 4.2.2 界面原型 4.3 简要设计 4.3.1 接口 4.3.2 模块结构 基于包名划分模块。
service包:系统的核心,封装了所有下层细节,对外暴露简单的接口。 这实际上是一个Facade模式(外观模式)。 web包:包含所有与web相关的内容,JSP,Servlet,web.xml等。 persist包:处理账户信息的持久化,包括增删改查。
|
第5章 坐标和依赖
本章内容:【管理项目依赖】
什么是Maven坐标,坐标详解,account-email,依赖的配置,依赖范围,传递性依赖,依赖调解,可选依赖,最佳实践,小结。
Maven的一大功能是管理项目依赖。
依赖管理的底层基础:坐标。
5.1 何为Maven坐标
Maven坐标的元素包括groupId、artifactId、version、packageing、classifier。
Maven中央仓库地址:http://repol.maven.org/maven2
5.2 坐标详解 P71
——groupId:定义当前Maven项目隶属的实际项目。
一个实际项目往往被划分为很多模块。
——artifactId:定义实际项目中的一个Maven模块项目。
一般使用实际项目名作为前缀,以便区分。
——version
——packaging:Maven项目的打包方式。
——classifier:该元素用来帮助定义构建输出的一些附属构件,比如nexus-indexer-2.0.0-javadoc.jar。
不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成的。
5.3 account-email
熟悉该发送账户激活电子邮件模块的POM配置和Spring配置。
5.3.1 account-email的POM
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0/xsd">
下图为导入到Eclipse后的界面:
scope:用来定义依赖范围。
5.3.2 account-email的主代码
5.4 依赖的配置
P80
5.5 依赖范围
P81