说得很精彩,通俗易懂。https://www.jianshu.com/p/0fb5e3fb704d
我作一个自己的总结:
Maven的原理从POM(Project Object Model)和Lifecycle(生命周期)说起,pom文件其实就是POM对象的映射,定义依赖groupId、artifactId和version可以定位到jar包路径,可以继承以及定义其他属性,类似Java类。查找顺序是本地仓库-->私服/中央仓库。
所有POM对象都继承自一个Super POM根对象,它很像Java中的Object。
Lifecycle对应多个phase(阶段),类似年对应春夏秋冬,定义了流程,就像是Java中的接口,约定规范。plugin也是maven项目,包含了一个或多个goal,每个phase对应一个goal,goal在maven中就是一个Mojo(Maven old java object)担当实现类的角色,
具体操作在goal的execute()方法中实现。
Maven设计规范中有一个是“约定大于配置”(convention over configuration),Super POM中定义了Lifecycle每一步goal去哪里找对应的源文件,比如compile默认从/src/main/java下查找源文件进行编译。
Super POM对应的pom.xml在maven安装目录下lib/maven-model-builder-3.0.3.jar:org/apache/maven/model/pom-4.0.0.xml,里面定义了默认配置。