1 简单的核心概念

1.1 坐标

groupId、artifactId、version,很简单,这三个坐标定位到了该依赖的位置,有了它们就可以下载该依赖了。

1.2 依赖

如果一个jar包使用了另外一个jar包中的类,那么就说该jar包依赖另外一个jar包。

1.3 仓库

jar包放在仓库中,方便共享。

2 难的核心概念

2.1 生命周期

同一套生命周期的各个阶段之间是有相互依赖关系的,后面的阶段会依赖前面的阶段,也就是说,调用后面的阶段的时候会触发前面阶段的插件的执行。

比如maven test会触发它前面的validate、initialize、compile的执行。

触发生命周期阶段的执行本质上是触发该阶段对应的插件的执行。

2.1.1 生命周期和插件之间的关系

生命周期的工作是插件完成的,生命周期和插件协同工作,密不可分。

2.2 三套生命周期

每套生命周期之间是相互独立的,触发某套生命周期的时候不会对其它套生命产生影响。

2.2.1 clean生命周期

pre-clean->clean->post-clean

2.2.2 default生命周期

validate->initialize->compile->test->package->verify->install->deploy

2.2.3 site生命周期

这套生命周期可以不管。

生命周期是抽象的,具体的工作是由相应的插件完成的。

2.2 插件

2.2.1 常用的插件

maven-shade-plugin     maven-shade-plugin 只存在一个goal shade:shade,需要将其绑定到 phase package 上。

maven-compiler-plugin    编译。

maven-surefire-plugin       执行测试用例的插件。

protobuf-maven-plugin     默认绑定到generate-sources阶段,compiles main .proto definitions into Java files and attaches the generated Java sources to the project,所以,在java代码中可以访问到这些生成的java代码,这是如何做到的?

2.2.2 插件绑定

本质上是maven的生命周期的阶段和插件的目标相互绑定,用以完成实际的构建任务。

2.2.3 插件所绑定的生命周期

maven-compiler-plugin:compile <--> compile

maven-compiler-plugin:testCompile<-->test-compile

maven-surefire-plugin:test <--> test

maven-shade-plugin:shade<-->package

2.2.4 插件的目标

每个插件有多个目标,每个目标对应一个功能。

maven的核心概念-LMLPHP

冒号前面是插件前缀,后面是插件目标。

2.2.5 一个生命周期对应一个插件目标

如果没有指定<phase>,那么就会绑定到插件默认的生命周期阶段上。如果插件没有默认生命周期阶段,那么插件目标将不会被执行。

当多个插件目标绑定到同一生命周期阶段的时候、顺序是按照插件声明的顺序来决定目标的执行顺序。

如果一个生命周期阶段有默认的插件目标,现在又设置了一个插件目标,那么设置的插件目标会覆盖默认的插件目标吗?

暂时认为是覆盖的。

2.3 继承和聚合

这个暂放。

3 各个插件参考资料

http://maven.apache.org/plugins/maven-compiler-plugin/index.html

05-11 20:03