本笔记主要记录关于Maven知识体系的一些Pages和Tips!
一、Maven入门手册
阅读内容:Maven Getting Started Guide 和 The Philosophy of Maven 以及 The History of Maven
该文主要涉及的主要知识点包括:
什么是Maven
如何配置Maven项目
如何对Maven应用进行编译/测试/安装
快照(SNAPSHOT)版本简述
如何添加资源文件以及进行过滤
如何使用外部依赖
如何将自己的Jar部署到远端中央仓库
如何构建其他类型的项目
如何一次构建多个项目
二、Maven配置
阅读内容:Configuring Maven
该文提到Maven的配置分为三个层级:
- Project:项目级,通过pom.xml静态配置。
- Installation:安装级,Maven安装时配置。
- User:用户级,对于不同的用户有不同的配置。
项目级配置内容定义了对一个项目所需的基本配置信息,该配置与环境和使用者无关,而其他的则是对于当前运行环境的配置。
对于项目级配置内容,一般通过pom.xml进行静态配置。对于用户级配置内容,一般通过${user.home}/.m2/settings.xml
进行配置。
三、Maven项目骨架
阅读内容:Introduction to Archetypes
该文对archetype的概念进行了解释,archetype是Maven项目模板工具包。
An archetype is defined as an original pattern or model from which all other things of the same kind are made.
使用方法:
mvn archetype:generate
Maven中archetype常见类型有:
- maven-archetype-archetype
- maven-archetype-j2ee-simple
- maven-archetype-mojo
- maven-archetype-plugin
- maven-archetype-plugin-site
- maven-archetype-portlet
- maven-archetype-quickstart
- maven-archetype-simple
- maven-archetype-site
- maven-archetype-site-simple
- maven-archetype-webapp
四、Maven项目的标准目录布局
阅读内容:Introduction to the Standard Directory Layout
该文介绍了Maven项目的标准目录布局。在进行Maven项目开发时,应该遵循该目录布局进行文件的创建和使用,具体如下:
${basedir}
|-- pom.xml
|-- src
| |-- main
| | `-- java
| | `-- resources
| | `-- filters
| `-- test
| | `-- java
| | `-- resources
| | `-- filters
| `-- it
| `-- assembly
| `-- site
`-- LICENSE.txt
`-- NOTICE.txt
`-- README.txt
其中,有:
-
src/main/java
项目的源代码所在的目录 -
src/main/resources
项目的资源文件所在的目录 -
src/main/filters
项目的资源过滤文件所在的目录 -
src/main/webapp
如果是web项目,则该目录是web应用源代码所在目录,如html文件和web.xml等 -
src/test/java
测试代码所在的目录 -
src/test/resources
测试相关的资源文件所在的目录 -
src/test/filters
测试相关的资源过滤文件所在的目录 -
src/it
集成测试代码所在的目录,主要是供别的插件使用的 -
src/assembly
组件(Assembly)描述符所在的目录 -
src/site
站点文件 -
LICENSE.txt
项目的许可文件 -
NOTICE.txt
该项目依赖的库的注意事项 -
README.txt
项目的readme文件
五、POM文件介绍
A Project Object Model or POM is the fundamental unit of work in Maven. It is an XML file that contains information about the project and configuration details used by Maven to build the project.
文中对POM文件的基本元素进行了简单的介绍,包括:
- project
- modelVersion
- groupId
- artifactId
- packaging
- version
- name
- url
- description
该文介绍了两个概念:Super POM 和 Minimal POM
- Super POM
Super POM 是Maven的默认POM。所有的POM都会继承该Super POM,也就是说,当你创建项目时,你所使用的POM都是继承了该Super POM的。
其位于$M2_HOME/lib/maven-model-builder-xxx.jar
的org/apache/maven/model/pom-4.0.0.xml
中。
- Minimal POM
一个Minimal POM必须包含下面的指定内容:project/modelVersion/groupId/artifactId/version。另外,可以看到,Minimal POM并未强制要求设置repositories
,因为其继承了Super POM,在Super POM中定义了默认的repositories
信息。
另外,在该文中,个人觉得很重要的一部分就是关于项目间关系的举例介绍。
- 项目继承(project inheritance)
项目继承在各自的子模块的POM中指定parent信息。对于如何使用项目继承,文中给出了两个例子Example1和Example2(重点理解)。
- 项目聚合(project aggregation)
与项目继承不同的是,其放弃在子模块的POM中指定parent信息,而是在parent POM中指定模块信息。如何实现项目聚合?首先,更改parent POM的packaging值为pom;然后,在parent POM中注册modules信息。对于具体案例,文中给出了Example3和Example4两个例子(重点理解)。
- 同时使用项目继承和项目聚合
Opendaylight中使用该方式进行项目管理。
对于项目关系,总结三条原则:
- 对每一个child POM指定其parent POM
- 改变parent POM的packaging属性为pom
- 在parent注册每个子模块信息
文中给出了Example5的案例进行参考。
同时,该文介绍了如何在POM文件中使用变量。
六、Maven仓库
阅读内容:Introduction to Repositories
该文主要对于Maven的仓库进行了简要的介绍。对于仓库的介绍,也可以参考《Maven实战》的第6章关于仓库的讲解。
七、Maven依赖机制详解
阅读内容:Introduction to Dependency Mechanism
Dependency management is one of the features of Maven that is best known to users and is one of the areas where Maven excels.
该文主要介绍了Maven的依赖机制,解释了传递性依赖/依赖范围/依赖管理/系统依赖等内容。着重掌握文中的几个例子。
另外,《Maven实战》的第5章对于坐标和依赖的讲解也很仔细,可以参照阅读。
八、小结
Maven的核心内容就是上面的一些知识点,推荐阅读官网文档和《Maven实战》等书籍,结合实践加深理解。