J2EE项目目前成熟的框架、工具很多,但个人对整个项目完整的开发、测试、部署、发布及代码管理缺乏系统整理。
本文旨在对整个项目管理全生命周期详述,以期改进、总结项目流程
主要围绕下述几个维度和工具展开:
- 项目配置工具: Maven, Git, Log4j
- 代码测试: TestNG, Selenium
- 代码管理: GitLab
- 代码审核: Gerrit
- 持续集成及发布: Jenkins
一、项目配置工具:Maven, Git, Log4j
1.1 项目管理与构建:Maven
maven是一个项目构建和管理的工具,提供了帮助管理 构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。
Build Lifecycle: 是指一个项目build的过程。maven的Build Lifecycle分为三种,分别为default(处理项目的部署)、clean(处理项目的清理)、site(处理项目的文档生成)。他们都包含不同的lifecycle。
Pom: project object Model, 是一个xml,在maven2里为pom.xml。pom文件中包含了项目的信息和maven build项目所需的配置信息,通常有项目信息(如版本、成员)、项目的依赖、插件和goal、build选项等等。
pom是可以继承的,通常对于一个大型的项目或是多个module的情况,子模块的pom需要指定父模块的pom
project pom文件的顶级元素
modelVersion 所使用的object model版本,为了确保稳定的使用,这个元素是强制性的。除非maven开发者升级模板,否则不需要修改
groupId 是项目创建团体或组织的唯一标志符,通常是域名倒写,如groupId org.apache.maven.plugins就是为所有maven插件预留的
artifactId 是项目artifact唯一的基地址名
packaging artifact打包的方式,如jar、war、ear等等。默认为jar。这个不仅表示项目最终产生何种后缀的文件,也表示build过程使用什么样的lifecycle。
version artifact的版本,通常能看见为类似0.0.1-SNAPSHOT,其中SNAPSHOT表示项目开发中,为开发版本
name 表示项目的展现名,在maven生成的文档中使用
url表示项目的地址,在maven生成的文档中使用
description 表示项目的描述,在maven生成的文档中使用
dependencies 表示依赖,在子节点dependencies中添加具体依赖的groupId artifactId和version
build 表示build配置
parent 表示父pom
其中groupId:artifactId:version唯一确定了一个artifact
Artifact: 项目产生的文件(jar, 源码, 二进制文件, war, pom)等,每个artifact由groupId:artifactId:version组成的标识符唯一识别。
Repositories: 仓库,用来存储各种不同的Artifact。
Maven Build Lifecycle | Maven构建的生命周期
1 | validate: 验证项目是否正确以及必须的信息是否可用 |
Maven常用命令和参数
常用命令
1 | mvn test-compile: 编译测试代码 |
每个phase都可以作为goal,也可以联合,如mvn clean install
将先执行mvn clean
清理项目,再执行mvn install
安装package到本地库。
常用参数
mvn -e 显示详细错误
mvn -U 强制更新snapshot类型的插件或依赖库(否则maven一天只会更新一次snapshot依赖)
mvn -o 运行offline模式,不联网更新依赖
mvn -N仅在当前项目模块执行命令,关闭reactor
mvn -pl module_name在指定模块上执行命令
mvn -ff 在递归执行命令过程中,一旦发生错误就直接退出
mvn -Dxxx=yyy指定java全局属性
mvn -Pxxx引用profile xxx
常用指令
1 | mvn archetype:generate 创建maven项目 |
Maven实例
- Maven创建quick start项目
1
mvn archetype:generate -DgroupId=com.trinea.maven.test -DartifactId=maven-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
其中DgroupId指定groupId,DartifactId指定artifactId,DarchetypeArtifactId指定ArchetypeId,
DinteractiveMode表示是否使用交互模式,交互模式会让用户填写版本信息之类的,非交互模式采用默认值
- Maven创建web项目
1
mvn archetype:generate -DgroupId=com.trinea.maven.web.test -DartifactId=maven-web -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
本小节参考文章:
1.2 版本控制: Git
Git 定义
Git主要用法
git rebase强调说明
git 生命周期
1.3 运行日志: Log4j
二、代码测试:TestNG, Selenium
2.1 单元测试:TestNG
关于JUnit和TestNG的对比,可参考追求代码质量: JUnit 4 与 TestNG 的对比
2.2 功能测试: Selenium
自动化功能测试,Selenium模拟浏览器操作,进行页面元素的判断。不仅局限于测试,可以开发很多工具。
三、代码管理:GitLab
GitLab提供媲美GitHub的功能,适合团队内部构建自己的代码管理系统,官网:GitLab Download
由于国内网络环境的特殊原因,推荐方式基本无法顺利进行。
同时官网也特别提到If you are located in China, try using the GitLab CE mirror hosted by TUNA
建议国内用户采用清华TUNA方式安装GitLab
采用清华TUNA源的GitLab安装步骤如下:
3.1信任GitLab的GPG公钥
1 | curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null |
3.2 下载并安装GitLab安装包
1 | * 添加deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu trusty main到文件gitlab-ce.list中。 |
3.3 配置GitLab
1 | * 修改GitLab使用端口为8081,避免冲突 |
3.4 浏览器访问页面
安装后本地访问地址:http://localhost:8081
1 | Username: root |
后记
初始化的默认配置比较简单,但若要自定义化满足组织实际需求,需要按照官网文档仔细配置。
这将在下一篇文章《GitLab自定义配置指南》中详述。