Maven权威指南

Authors

Tim O'Brien (Sonatype, Inc.) , John Casey (Sonatype, Inc.) , Brian Fox (Sonatype, Inc.) , Bruce Snyder () , Jason Van Zyl (Sonatype, Inc.) , Juven Xu ()

Abstract

Maven权威指南是一本关于Apache Maven的书。


Copyright
1. Creative Commons BY-ND-NC
Foreword: Beta 0.16
Preface
1. How to Use this Book
2. Your Feedback
3. Font Conventions
4. Maven Writing Conventions
5. Acknowledgements
1. 介绍 Apache Maven
1.1. Maven... 它是什么?
1.2. 约定优于配置(Convention Over Configuration)
1.3. 一个一般的接口
1.4. 基于Maven插件的全局性重用
1.5. 一个“项目”的概念模型
1.6. Maven是Ant的另一种选择么?
1.7. 比较Maven和Ant
1.8. 总结
2. 安装和运行Maven
2.1. 验证你的Java安装
2.2. 下载Maven
2.3. 安装Maven
2.3.1. 在Mac OSX上安装Maven
2.3.2. 在Microsoft Windows上安装Maven
2.3.3. 在Linux上安装Maven
2.3.4. 在FreeBSD或OpenBSD上安装Maven
2.4. 验证Maven安装
2.5. Maven安装细节
2.5.1. 用户相关配置和仓库
2.5.2. 升级Maven
2.6. 获得Maven帮助
2.7. 使用Maven Help插件
2.7.1. 描述一个Maven插件
2.8. 关于Apache软件许可证
I. Maven实战
3. 一个简单的Maven项目
3.1. 简介
3.1.1. 下载本章的例子
3.2. 创建一个简单的项目
3.3. 构建一个简单的项目
3.4. 简单的项目对象模型 (Project Object Model)
3.5. 核心概念
3.5.1. Maven插件和目标 (Plugins and Goals)
3.5.2. Maven生命周期 (Lifecycle)
3.5.3. Maven坐标 (Coordinates)
3.5.4. Maven仓库(Repositories)
3.5.5. Maven依赖管理 (Dependency Management)
3.5.6. 站点生成和报告 (Site Generation and Reporting)
3.6. 小结
4. 定制一个Maven项目
4.1. 介绍
4.1.1. 下载本章样例
4.2. 定义Simple Weather项目
4.2.1. Yahoo! Weather RSS
4.3. 创建Simple Weather项目
4.4. 定制项目信息
4.5. 添加新的依赖
4.6. Simple Weather源码
4.7. 添加资源
4.8. 运行Simple Weather项目
4.8.1. Maven Exec 插件
4.8.2. 浏览你的项目依赖
4.9. 编写单元测试
4.10. 添加测试范围依赖
4.11. 添加单元测试资源
4.12. 执行单元测试
4.12.1. 忽略测试失败
4.12.2. 跳过单元测试
4.13. 构建一个打包好的命令行应用程序
5. 一个简单的Web应用
5.1. 介绍
5.1.1. 下载本章样例
5.2. 定义这个简单的Web应用
5.3. 创建这个简单的Web应用
5.4. 配置Jetty插件
5.5. 添加一个简单的Servlet
5.6. 添加J2EE依赖
5.7. 小结
6. 一个多模块项目
6.1. 简介
6.1.1. 下载本章样例
6.2. simple-parent 项目
6.3. simple-weather 模块
6.4. simple-webapp 模块
6.5. 构建这个多模块项目
6.6. 运行Web应用
7. 多模块企业级项目
7.1. 简介
7.1.1. 下载本章样例
7.1.2. 多模块企业级项目
7.1.3. 本例中所用的技术
7.2. simple-parent项目
7.3. simple-model模块
7.4. simple-weather模块
7.5. simple-persist模块
7.6. simple-webapp模块
7.7. 运行这个Web应用
7.8. simple-command模块
7.9. 运行这个命令行程序
7.10. 小结
7.10.1. 编写接口项目程序
8. 优化和重构POM
8.1. 简介
8.2. POM清理
8.3. 优化依赖
8.4. 优化插件
8.5. 使用Maven Dependency插件进行优化
8.6. 最终的POM
8.7. 小结
II. Maven Reference
9. 项目对象模型
9.1. 简介
9.2. POM
9.2.1. 超级POM
9.2.2. 最简单的POM
9.2.3. 有效POM
9.2.4. 真正的POM
9.3. POM语法
9.3.1. 项目版本
9.3.1.1. 版本构建号
9.3.1.2. SNAPSHOT版本
9.3.1.3. LATEST 和 RELEASE 版本
9.3.2. 属性引用
9.4. 项目依赖
9.4.1. 依赖范围
9.4.2. 可选依赖
9.4.3. 依赖版本界限
9.4.4. 传递性依赖
9.4.4.1. 传递性依赖和范围
9.4.5. 冲突解决
9.4.6. 依赖管理
9.5. 项目关系
9.5.1. 坐标详解
9.5.2. 多模块项目
9.5.3. 项目继承
9.6. POM最佳实践
9.6.1. 依赖归类
9.6.2. 多模块 vs. 继承
9.6.2.1. 简单项目
9.6.2.2. 多模块企业级项目
9.6.2.3. 原型父项目
10. 构建生命周期
10.1. 简介
10.1.1. 清理生命周期 (clean)
10.1.2. 默认生命周期 (default)
10.1.3. 站点生命周期 (site)
10.2. 打包相关生命周期
10.2.1. JAR
10.2.2. POM
10.2.3. Maven Plugin
10.2.4. EJB
10.2.5. WAR
10.2.6. EAR
10.2.7. 其它打包类型
10.3. 通用生命周期目标
10.3.1. Process Resources
10.3.2. Compile
10.3.3. Process Test Resources
10.3.4. Test Compile
10.3.5. Test
10.3.6. Install
10.3.7. Deploy
11. 构建Profile
11.1. Profile是用来做什么的?
11.1.1. 什么是构建可移植性
11.1.1.1. 不可移植构建
11.1.1.2. 环境可移植性
11.1.1.3. 组织(内部)可移植性
11.1.1.4. 广泛(全局)可移植性
11.1.2. 选择一个适当级别的可移植性
11.2. 通过Maven Profiles实现可移植性
11.2.1. 覆盖一个项目对象模型
11.3. 激活Profile
11.3.1. 激活配置
11.3.2. 通过属性缺失激活
11.4. 外部Profile
11.5. Settings Profile
11.5.1. 全局Settings Profile
11.6. 列出活动的Profile
11.7. 提示和技巧
11.7.1. 常见的环境
11.7.2. 安全保护
11.7.3. 平台分类器
11.8. 小结
12. Maven套件
12.1. 简介
12.2. Assembly基础
12.2.1. 预定义的套件描述符
12.2.2. 构建一个套件Building an Assembly
12.2.3. 套件作为依赖
12.2.4. 通过套件依赖组装套件
12.3. 套件描述符概述
12.4. 套件描述符
12.4.1. 套件描述符中的属性引用
12.4.2. 必须的套件信息
12.5. 控制一个套件的内容
12.5.1. Files 元素
12.5.2. FileSets 元素
12.5.3. fileSets的默认排除模式
12.5.4. dependencySets 元素
12.5.4.1. 自定义依赖输出目录
12.5.4.2. 依赖输出位置的属性插值
12.5.4.3. Including and Excluding Dependencies by Scope
12.5.4.4. Fine Tuning: Dependency Includes and Excludes
12.5.4.5. Transitive Dependencies, Project Attachments, and Project Artifacts
12.5.4.6. Advanced Unpacking Options
12.5.4.7. Summarizing Dependency Sets
12.5.5. moduleSets 部分
12.5.5.1. Module Selection
12.5.5.2. Sources Section
12.5.5.3. Interpolation of outputDirectoryMapping in moduleSets
12.5.5.4. Binaries section
12.5.5.5. moduleSets, Parent POMs and the binaries Section
12.5.6. Repositories Section
12.5.7. Managing the Assembly’s Root Directory
12.5.8. componentDescriptors and containerDescriptorHandlers
12.6. Best Practices
12.6.1. Standard, Reusable Assembly Descriptors
12.6.2. Distribution (Aggregating) Assemblies
12.7. Summary
13. 属性和资源过滤
13.1. 简介
13.2. Maven属性
13.2.1. Maven项目的属性
13.2.2. Maven的Settings属性
13.2.3. 环境变量属性
13.2.4. Java系统属性
13.2.5. 用户定义的属性
13.3. 资源过滤
14. Maven和Eclipse: m2eclipse
14.1. 简介
14.2. m2eclipse
14.3. 安装 m2eclipse 插件
14.3.1. 安装前提条件
14.3.1.1. 安装 Subclipse
14.3.1.2. 安装 Mylyn
14.3.1.3. 安装 AspectJ Tools Platform (AJDT)
14.3.1.4. 安装 Web Tools Platform (WTP)
14.3.2. 安装 m2eclipse
14.4. 开启 Maven 控制台
14.5. 创建一个 Maven 项目
14.5.1. 从 SCM 签出一个 Maven 项目
14.5.2. 用Maven Archetype创建一个Maven项目
14.5.3. 创建一个 Maven 模块
14.6. 创建一个Maven POM文件
14.7. 导入Maven项目
14.7.1. 导入一个Maven项目
14.7.2. 具体化一个Maven项目
14.8. 运行Maven构建
14.9. 使用Maven进行工作
14.9.1. 添加及更新依赖或插件
14.9.2. 创建一个Maven模块
14.9.3. 下载源码
14.9.4. 打开项目页面
14.9.5. 解析依赖
14.10. 使用Maven仓库进行工作
14.10.1. 搜索 Maven 构件和 Java 类
14.10.2. 为Maven仓库编制索引
14.11. 使用基于表单的POM编辑器
14.12. 在m2eclipse中分析项目依赖
14.13. Maven 选项
14.14. 小结
15. 站点生成
15.1. 简介
15.2. 使用Maven构建项目站点
15.3. 自定义站点描述符
15.3.1. 自定义页面顶端图片
15.3.2. 自定义导航菜单
15.4. 站点目录结构
15.5. 编写项目文档
15.5.1. APT样例
15.5.2. FML样例
15.6. 部署你的项目web站点
15.6.1. 配置服务器认证
15.6.2. 配置文件和目录模式
15.7. 自定义站点外观
15.7.1. 自定义站点CSS
15.7.2. 创建自定义的站点模板
15.7.3. 可重用的web站点皮肤
15.7.4. 创建自定义的主题CSS
15.7.5. 在皮肤中自定义站点模板
15.8. 提示与技巧
15.8.1. 给HEAD嵌入XHTML
15.8.2. 在你站点logo下添加链接
15.8.3. 为你的站点添加导航链接
15.8.4. 添加项目版本
15.8.5. 修改发布日期格式和位置
15.8.6. 使用Doxia宏
16. 仓库管理器
16.1. 简介
16.1.1. Nexus历史
16.2. 安装Nexus
16.2.1. 从Sonatype下载Nexus
16.2.2. 安装Nexus
16.2.3. 运行Nexus
16.2.4. 安装后检查单
16.2.5. 为Redhat/Fedora/CentOS设置启动脚本
16.2.6. 升级Nexus版本
16.3. 使用Nexus
16.3.1. 浏览仓库
16.3.2. 浏览组
16.3.3. 搜索构件
16.3.4. 浏览系统RSS源
16.3.5. 浏览日志文件和配置
16.3.6. 更改你的密码
16.4. 配置Maven使用Nexus
16.4.1. 使用Nexus中央代理仓库
16.4.2. 使用Nexus作为快照仓库
16.4.3. 为缺少的依赖添加仓库
16.4.4. 添加一个新的仓库
16.4.5. 添加一个仓库至一个组
16.5. 配置Nexus
16.5.. 定制服务器配置
16.5.2. 管理仓库
16.5.3. 管理组
16.5.4. 管理路由
16.5.5. 网络配置
16.6. 维护仓库
16.7. 部署构件至Nexus
16.7.1. 部署发布版
16.7.2. 部署快照版
16.7.3. 部署第三方构件
17. 编写插件
17.1. 简介
17.2. Maven编程
17.2.1. 什么是反转控制?
17.2.2. Plexus简介
17.2.3. 为什么使用Plexus?
17.2.4. 什么是插件?
17.3. 插件描述符
17.3.1. 顶层插件描述符元素
17.3.2. Mojo配置
17.3.3. 插件依赖
17.4. 编写自定义插件
17.4.1. 创建一个插件项目
17.4.2. 一个简单的Java Mojo
17.4.3. 配置插件前缀
17.4.4. 插件中的日志
17.4.5. Mojo类注解
17.4.6. 当Mojo失败的时候
17.5. Mojo参数
17.5.1. 为Mojo参数提供值
17.5.2. 多值的Mojo参数
17.5.3. 依赖于一个Plexus组件
17.5.4. Mojo参数注解
17.6. 插件和Maven生命周期
17.6.1. 执行平行的生命周期
17.6.2. 创建自定义的生命周期
17.6.3. 覆盖默认生命周期
18. Writing Plugins in Alternative Languages
18.1. Writing Plugins in Ant
18.2. Creating an Ant Plugin
18.3. Writing Plugins in JRuby
18.3.1. Creating a JRuby Plugin
18.3.2. Ruby Mojo Implementations
18.3.3. Logging from a Ruby Mojo
18.3.4. Raising a MojoError
18.3.5. Referencing Plexus Components from JRuby
18.4. Writing Plugins in Groovy
18.4.1. Creating a Groovy Plugin
A. 附录: Settings细节
A.1. 简介
A.2. Settings细节
A.2.1. 简单值
A.2.2. 服务器(Servers)
A.2.3. 镜像(Mirrors)
A.2.4. 代理(Proxies)
A.2.5. Profiles
A.2.6. 激活(Activation)
A.2.7. 属性(Properties)
A.2.8. 仓库(Repositories)
A.2.9. 插件仓库
A.2.10. 激活的Profile
B. Appendix: Sun Specification Alternatives