1 Maven的使用
1.1 介绍
Apache Maven是一款免费的,开源的,纯JAVA实现的项目管理及自动构建工具,由Apache软件基金会所提供。基于POM(Project Object Model,项目对象模型)概念,即每个Maven项目都会有其专属的pom.xml文件,利用这种中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven可以将其管理的项目过程规范化、自动化、高效化以及赋予强大的可扩展性。
1.2 功能
1.2.1 依赖管理
在Maven项目中,jar包不再需要复制到WEB-INF的lib下,而是通过将其在仓库中的坐标写入到pom.xml中完成引入。
1.2.2 项目构建
项目构建的生命周期分为三种,分别为default(处理项目的部署)、clean(处理项目的清理)、site(处理项目的文档生成)。他们都包含不同的生命周期。
项目构建的生命周期是由phases构成的,下面是default(处理项目的部署) 项目构建生命周期的几个重要的phase:
validate 验证项目是否正确以及必须的信息是否可用
compile 编译源代码
test 测试编译后的代码,即执行单元测试代码
package 打包编译后的代码,在target目录下生成package(项目)文件
integration-test 处理package(项目)以便需要时可以部署到集成测试环境
verify 检验package(项目)是否有效并且达到质量标准
install 安装package(项目)到本地仓库,方便本地其它项目使用
deploy 部署,拷贝最终的package(项目)到远程仓库和替他开发这或项目共享,在集成或发布环境完成
以上的phase是有序的(注意实际两个相邻phase之间还有其他phase被省略),下面一个phase的执行必须在上一个phase完成后,(另外clean的作用是清空 target目录,并不属于Maven生命周期)。
若直接以某一个phase为goal(特定任务,即常用命令),将先执行完它之前的phase,如mvn install,将会先mvn validate、mvn compile、mvn test、mvn package、mvn integration-test、mvn verify最后再执行这个install phase。
1.3 pom.xml
前面说过,Maven基于POM(Project Object Model,项目对象模型)概念。它是Maven工作的基础,pom文件中包含了项目的信息和项目构建时所需的配置信息。
pom是可以继承的,通常对于一个大型的多服务项目,子模块的pom需要指定父模块的pom。可以使用dependencyManagement标签对dependency依赖进行管理,在父模块加入dependencyManagement后,dependency在其中正常声明却不引入。在子模块中引入时不必声明版本号,此时才会真正引入依赖的jar文件(build标签中的plugin同理于dependency)。 下面是pom.xml中标签以及其含义:
project pom文件的顶级元素
modelVersion 所使用的object model版本,为了确保稳定的使用,这个元素是强制性的。除非Maven开发者升级模板,否则不需要修改
groupId 是项目创建团体或组织的唯一标志符,通常是域名倒写,如groupId org.apache.maven.plugins就是为所有Maven插件预留的
artifactId 是项目(artifact)唯一的基地址名
packaging artifact打包的方式,如jar、war等等。默认为jar。这个不仅表示项目最终产生何种后缀的文件,也表示build过程使用什么样的lifecycle。
version artifact的版本,通常能看见为类似0.0.1-SNAPSHOT,其中SNAPSHOT表示项目开发中,为开发版本
name 表示项目的展现名,在maven生成的文档中使用
url表示项目的地址,在maven生成的文档中使用
description 表示项目的描述,在maven生成的文档中使用
dependencies 表示依赖,在子节点dependencies中添加具体依赖的groupId、artifactId和version,而上述三个名词确定了一个artifact
build 表示build配置,其中可以加入plugin插件
parent 表示父pom
1.4 Artifact和Repositories
1.4.1 Artifact
指的是一个项目生成的一系列文件,可以使jar/war等。每个项目(artifact)都由groupId:artifactId:version组成的标识符唯一识别。其中需要被依赖的项目(artifact)都要放在仓库(Repository)中,这个过程可以由生命周期phase的goal–>mvn install实现。
1.4.2 Repositories
如其名,仓库。用来存储各种Artifact,分为本地/远端库。我们mvn install生成的、由远端仓库下载到本地的jar都存于本地仓库;远端仓库(中央仓库、企业/个人自建的如阿里云)指远程服务器上用于存储Artifact的仓库,包含的jar包需要我们在pom中声明dependency,编译代码时就会根据dependency去下载相应的jar(Artifact)到本地仓库供使用其中的功能。
windows机器本地仓库地址默认为系统用户的.m2/repository下面。默认的远端仓库地址为http://mvnrepository.com/,这些均可以在maven/conf/settings.xml中修改。
1.5 用法
Maven项目是根据Archetype(原型)创建的。
原型对于项目的作用就相当于模具对于工具的作用,我们可以根据项目类型的需要使用不同的Archetype创建项目。通过Archetype我们可以快速标准的创建项目。
2 SVN的使用
2.1 介绍
Apache Subversion(简称SVN,svn),一个开放源代码的基于C/S架构的版本控制系统,相较于RCS、CVS,它采用了分支管理系统。
2.2 作用
代码管理 ,多人协同开发,备份 ,版本更新回退等。
2.3 常用命令
2.3.1 创建代码仓库
svnadmin create 存放代码的目录
该命令一般由项目经理/组长角色执行,一般在项目开始之前,一般一个项目设置一次。
2.3.2 启动监听(开猫)
svnserve -d -r 仓库目录
该命令一般由组长角色 每天上班之前执行一次
2.3.3 检出
svn checkout
把项目从代码服务器下载到本地机器,一般一个项目由程序员检出一次
2.3.4 更新
svn update
该命令由程序员执行,每天多次
2.3.5 提交
svn commit
该命令由程序员执行多次
2.4 SVN提交文档冲突的情况
- 当一方更新之后提交,另一方没有更新直接提交的时候,会出现冲突情况
- 当冲突之后会出现四类文件:
- 包含冲突双方的文件
- 自己的文件
- 包含对方内容的文件
- 冲突之前的文件
- 处理:
- 原则:1.先更新 2.提交
- 删除三个, 留一个最全的,手动改