|
|
|
|
@ -23,16 +23,42 @@
|
|
|
|
|
- 不适合大型Java项目的复杂构建需求
|
|
|
|
|
|
|
|
|
|
### 主要应用场景
|
|
|
|
|
|
|
|
|
|
- C/C++项目(传统领域)
|
|
|
|
|
- 简单脚本自动化
|
|
|
|
|
- 需要高度定制化的构建流程
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 生命周期
|
|
|
|
|
Make没有标准的生命周期概念,但通常遵循以下构建流程:
|
|
|
|
|
|
|
|
|
|
1. **依赖分析**: 解析Makefile中的依赖关系
|
|
|
|
|
2. **增量构建**: 只重新构建变更的文件
|
|
|
|
|
3. **目标执行**: 按依赖顺序执行规则
|
|
|
|
|
4. **清理**: 可选的清理操作
|
|
|
|
|
|
|
|
|
|
**典型执行顺序**:
|
|
|
|
|
```
|
|
|
|
|
make [target]
|
|
|
|
|
↓
|
|
|
|
|
解析依赖关系
|
|
|
|
|
↓
|
|
|
|
|
检查文件时间戳
|
|
|
|
|
↓
|
|
|
|
|
执行变更的规则
|
|
|
|
|
↓
|
|
|
|
|
完成目标
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Windows使用注意
|
|
|
|
|
|
|
|
|
|
- 需要安装MSYS2、Cygwin或MinGW提供make命令
|
|
|
|
|
- 文件路径使用正斜杠/而非反斜杠\
|
|
|
|
|
- 命令行工具兼容性问题较多
|
|
|
|
|
|
|
|
|
|
### 示例 (Makefile)
|
|
|
|
|
|
|
|
|
|
```makefile
|
|
|
|
|
# Makefile 示例
|
|
|
|
|
JAVAC = javac
|
|
|
|
|
@ -135,10 +161,57 @@ clean:
|
|
|
|
|
- 构建速度相对较慢
|
|
|
|
|
- 定制化程度不如Ant和Gradle
|
|
|
|
|
|
|
|
|
|
### 主要应用场景
|
|
|
|
|
- 企业级Java项目
|
|
|
|
|
- 需要标准化构建流程的团队开发
|
|
|
|
|
- Spring Boot、微服务架构项目
|
|
|
|
|
### 生命周期
|
|
|
|
|
Maven有三大内置生命周期,每个生命周期包含多个阶段:
|
|
|
|
|
|
|
|
|
|
**Clean Lifecycle** (清理生命周期):
|
|
|
|
|
- `pre-clean`: 执行清理前的工作
|
|
|
|
|
- `clean`: 清理上一次构建生成的文件
|
|
|
|
|
- `post-clean`: 执行清理后的工作
|
|
|
|
|
|
|
|
|
|
**Default Lifecycle** (默认生命周期):
|
|
|
|
|
- `validate`: 验证项目结构和配置
|
|
|
|
|
- `initialize`: 初始化构建状态
|
|
|
|
|
- `generate-sources`: 生成编译所需的源代码
|
|
|
|
|
- `process-sources`: 处理源代码
|
|
|
|
|
- `generate-resources`: 生成资源文件
|
|
|
|
|
- `process-resources`: 处理资源文件并复制到目标目录
|
|
|
|
|
- `compile`: 编译项目源代码
|
|
|
|
|
- `process-classes`: 处理编译后的文件
|
|
|
|
|
- `generate-test-sources`: 生成测试源代码
|
|
|
|
|
- `process-test-sources`: 处理测试源代码
|
|
|
|
|
- `generate-test-resources`: 生成测试资源
|
|
|
|
|
- `process-test-resources`: 处理测试资源
|
|
|
|
|
- `test-compile`: 编译测试源代码
|
|
|
|
|
- `process-test-classes`: 处理测试编译文件
|
|
|
|
|
- `test`: 运行测试
|
|
|
|
|
- `prepare-package`: 准备打包前的工作
|
|
|
|
|
- `package`: 打包编译后的代码
|
|
|
|
|
- `pre-integration-test`: 集成测试前的工作
|
|
|
|
|
- `integration-test`: 运行集成测试
|
|
|
|
|
- `post-integration-test`: 集成测试后的工作
|
|
|
|
|
- `verify`: 验证包是否有效
|
|
|
|
|
- `install`: 安装包到本地仓库
|
|
|
|
|
- `deploy`: 部署包到远程仓库
|
|
|
|
|
|
|
|
|
|
**Site Lifecycle** (站点生命周期):
|
|
|
|
|
- `pre-site`: 生成站点前的工作
|
|
|
|
|
- `site`: 生成项目站点文档
|
|
|
|
|
- `post-site`: 生成站点后的工作
|
|
|
|
|
- `site-deploy`: 部署站点到服务器
|
|
|
|
|
|
|
|
|
|
**执行顺序**:
|
|
|
|
|
```
|
|
|
|
|
mvn [phase]
|
|
|
|
|
↓
|
|
|
|
|
激活指定生命周期
|
|
|
|
|
↓
|
|
|
|
|
按顺序执行所有前序阶段
|
|
|
|
|
↓
|
|
|
|
|
执行插件目标
|
|
|
|
|
↓
|
|
|
|
|
完成构建
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 示例 (pom.xml)
|
|
|
|
|
```xml
|
|
|
|
|
@ -227,6 +300,54 @@ mvn clean install
|
|
|
|
|
- 多模块企业项目
|
|
|
|
|
- 需要复杂构建逻辑的项目
|
|
|
|
|
|
|
|
|
|
### 生命周期
|
|
|
|
|
Gradle没有预定义的生命周期,但通过任务依赖形成构建流程:
|
|
|
|
|
|
|
|
|
|
**标准构建流程**:
|
|
|
|
|
1. **初始化**: 解析settings.gradle和build.gradle
|
|
|
|
|
2. **配置**: 执行build.gradle脚本,创建任务图
|
|
|
|
|
3. **执行**: 按依赖顺序执行任务
|
|
|
|
|
|
|
|
|
|
**核心生命周期任务**:
|
|
|
|
|
- `assemble`: 组装项目产物(编译、打包)
|
|
|
|
|
- `check`: 运行所有检查(测试、代码质量)
|
|
|
|
|
- `build`: 执行完整构建(assemble + check)
|
|
|
|
|
- `clean`: 清理构建产物
|
|
|
|
|
|
|
|
|
|
**Java插件生命周期任务**:
|
|
|
|
|
```
|
|
|
|
|
compileJava → processResources → classes → jar → assemble
|
|
|
|
|
testCompileJava → processTestResources → testClasses → test → check
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**Android插件生命周期任务**:
|
|
|
|
|
```
|
|
|
|
|
preBuild → assembleDebug → assembleRelease → assemble
|
|
|
|
|
connectedDebugAndroidTest → connectedCheck → check
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**执行顺序**:
|
|
|
|
|
```
|
|
|
|
|
gradle [task]
|
|
|
|
|
↓
|
|
|
|
|
解析构建脚本
|
|
|
|
|
↓
|
|
|
|
|
构建任务依赖图
|
|
|
|
|
↓
|
|
|
|
|
按拓扑顺序执行任务
|
|
|
|
|
↓
|
|
|
|
|
执行任务动作
|
|
|
|
|
↓
|
|
|
|
|
完成构建
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**任务类型**:
|
|
|
|
|
- 编译: JavaCompile, GroovyCompile
|
|
|
|
|
- 测试: Test, JacocoReport
|
|
|
|
|
- 打包: Jar, War, Zip
|
|
|
|
|
- 发布: Publish, Upload
|
|
|
|
|
- 文档: Javadoc, Groovydoc
|
|
|
|
|
|
|
|
|
|
### 示例 (build.gradle)
|
|
|
|
|
```gradle
|
|
|
|
|
plugins {
|
|
|
|
|
@ -289,7 +410,7 @@ gradle clean
|
|
|
|
|
| 学习难度 | 中等 | 高 | 中等 | 高 |
|
|
|
|
|
| 构建速度 | 快 | 中等 | 中等 | 快 |
|
|
|
|
|
| 平台支持 | 一般 | 优秀 | 优秀 | 优秀 |
|
|
|
|
|
| 生态系统 | 小 | 中等 | 大 | 大 |
|
|
|
|
|
| 生命周期 | 自定义规则 | Target依赖 | 标准阶段 | 任务依赖图 |
|
|
|
|
|
| 主要优势 | 灵活定制 | 平台无关 | 标准化 | 现代化 |
|
|
|
|
|
|
|
|
|
|
## Windows环境推荐
|
|
|
|
|
|