约定(惯例)优先于配置
- 标准的目录结构
- *.java放到src/main/java目录下
- *.class在target目录下
- 配置及静态文件
- 这样做的好处就是:我们只需要把对应的源代码、文件放到正确的目录下,然后maven会自动帮我们找到,做其他所有的事情。
- 项目描述符,pom.xml。
POM,项目对象模型
- xml文件,pom.xml
- project 等价于 artifact
- 项目类型(packaging)
- pom,jar,war
- 坐标(groupId artifactId version)
- 属性,${propery}
- 依赖(dependency标签)
- 构建配置(build标签,plugin标签)
- 多项目(parent标签,modules标签)、继承
- 项目总体信息(名称、作者、开源协议)
配置pom遇到的问题
在实际开发中,一个现实的项目一般都是把一个项目拆分成多个子项目,这样做的好处是把一个大项目模块化,每个模块可以分开进行开发。但是在一个由多个子项目构成的大项目,在maven的配置过程中,往往会遇到一些问题。
- 多个子项目配置重复
- 修改繁琐
- 依赖版本不一致
- 配置管理混乱
这时,可以使用pom的继承,把公共的部分尝试提到父节点去,子节点从父节点继承。
pom的继承
- 可以类比JAVA中的继承
- 继承或者覆盖,Override
- 可继承项
- 坐标属性,如groupId
- 依赖配置
- 插件配置
- 一般性信息,如开发者信息
Super POM
- 所有Maven项目的POM都继承Super POM
- 是Maven的组成部分
- 超级POM定义了一组被所有项目共享的默认设置
- 默认的文件位置
- 统一的插件配置
- 默认的中央仓库配置
- 其他的一些设置
- mvn help:effective-pom , 就是eclipse中 Effective POM 可以看到一个POM继承了Super POM中所有的配置项后最后的POM的样子。
- 使用parent元素,可以显示配置父POM。
多项目构建
- parent项目,项目类型是pom。
- 定义modules。
- 子模块中配置parent,继承。
- 统一配置提到parent项目中。
- 既使用继承又使用组合 。