# 第二章 Java项目工程化

可能大家听过一种说法，就是厉害的程序员是直接用记事本来编写程序。暂且不去对这句话辨伪，但可以肯定的一点是单单使用记事本来编写程序是不可能搞定所有的应用开发尤其是大型应用的。试想，一个简单的小程序，用一个记事本写完，然后`javac` 编译再`java`运行，很简单的一件事情，再多点功能，厉害点的程序员也能轻松搞定。但是当项目越来越大，依赖的外部代码越来越多，单单用一个记事本来开发这个应用的难度也就越来越大。再随着协作开发的人也正在变得越来越多的时候，人员之间的协作也需要合适的工具、流程来规范和约束，才能保证项目按时保质地完成。这时候，就需要让项目变得工程化。

所谓的工程化就是采取各种机器或者人工手段解决诸如如何协作、如何规范化、如何保证质量、如何计划、如何控制进度等问题，以达到减少繁琐的重复性劳动，使得流程高效并且可重复。

具体到Java项目中，可以从以下几方面看待工程化需要解决的问题：

* 项目构建：对于Java项目来说，第三方类库依赖、构建流程化、项目结构标准化等都是项目构建工具需要解决的问题。
* 代码版本控制：代码是一个持续开发的过程，对于一个项目来说在这个过程中还会存在新的需求、版本迭代、bug修复等很多小的分支。此外，项目多个成员的代码如何集成在一起，如何防止代码文件冲突。这些都是需要代码版本控制需要解决的问题。
* 代码质量保证：这个是开发工作中非常主要的一点，需要制定代码规范，保证代码的可读性、可维护性。同时需要用一定的手段消除代码的bug，提升应用的服务质量。

本章就主要针对这三方面做具体的阐述。
