maven原理,几行代码读懂maven
程序写多了,感觉要描述的事情只有通过代码才能恰当表达。。。凭自己理解写的,若有谬误请指正。 当然下面这个也是代码不是伪码,方便表达而已无需纠结
//maven的所有插件统一继承自一个接口,至少有如下能力
interface mavenPlugin{
//执行业务
doSomeThing();
//该插件绑定的phase阶段(phase的含义后述)
getbindedPhase();
goalName();
}
//maven的主程序
class mavenExecutor(){
//maven执行时,预先定义了一个顺序规则,如果你想到达package,则必须
//先经过validtate和compile. 重要的事再说一次,这个是maven预定义的规则,不能变的,你只需理解这个规则
rule: "validate"<"compile"<"package"<"install"
//看作是maven运行时的入口
run(String goal){
mavenPlugin plugin=findPlugin(goal) //容后说明
goalPhase = plugin.getbindedPhase; //比如这一步得到的是 install
phaseList = calPhase(goalPhase,rule); //接上步,这步结果是[validate,compile,package,install]
//如上,想要执行后面的,必须要依次按规则直到到达
for(phase tempPhase: PhaseList){
mavenplugin jobPlugin = findBindedPluginByPhase(tempPhase);
jobPlugin.doSomeThing();
}
}
}
phase:阶段,用来描述和分界项目构建过程中的阶段,比如编译阶段,打包阶段。
一连串的相关的阶段连在一起,构成生命周期lifecycle(通常描述成一个生命周期包含若干个阶段);
原理上你可以将任何一个插件绑定到任何阶段上。
maven自带的常用插件都默认已经绑定在了恰当生命周期的恰当阶段上。比如maven-compile-plugin的phase是Default Lifecycle的compile
lifecycle: maven目前定义三个生命周期。生命周期可以"并行", 但其自身不能有多个。
1.Clean Lifecycle 在进行真正的构建之前进行一些清理工作。 >=3个phase
2.Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。 几十个phase,是maven的核心
3.Site Lifecycle 生成项目报告,站点,发布站点。>=3个phase
maven的命令: 通过制定运行目标来完成。 这些目标可以关联到一个具体的maven插件。
比如目标clean: 这个来自maven-clean-plugin.