maven运行过程解析

管理继承属性

比如api和biz都需要某个依赖,那么在echo项目的pom.xml中声明即可,因为根据PO对象的继承关系,api和biz项目会继承echo项目的依赖,这样就可以减少一些重复的输入。


effective pom命令了解


effective pom包含了当前项目的PO对象,直到Super POM对应的PO对象中的信息。要看一个项目的effective pom,只需在项目中执行

mvn help:effective-pom

命令即可查看。maven命令的语法为

mvn [options] [goal(s)] [phase(s)]

maven允许你执行一个或者多个goals/phases。很明显这面的命令help:effective-pom并不是一个phase,那么也就是说它是一个goal。对这个goal只不过是采用了缩写的形式,其全称是这样的:

org.apache.maven.plugins:maven-help-plugin:2.2:effective-pom

以分号为分隔符,包含了groupId,artifactId,version,goal四部分。若groupId为org.apache.maven.plugins则可以使用上述的简写形式。也就是说

mvn help:effective-pom

mvn org.apache.maven.plugins:maven-help-plugin:2.2:effective-pom

是等价的,都是执行了maven-help-plugin这个plugin中的effective-pom这个goal。

好了,继续回到effective pom。我们说过maven在真正构建的时候用的就是effective pom,那么说明effective pom中包含了构建的所有信息,我们以biz项目中的effective pom为例来看下effective pom长什么样子。在biz项目中执行mvn help:effective-pom命令,你会得到如下输出:

<?xml version="1.0"?>

4.0.0

org.maven

echo

1.0.0

org.maven

echo-biz

1.0.0

org.maven

echo-api

1.0.0

compile

/Users/allstarw/workspace/own-proj/misc/maven/echo/biz/src/main/java

/Users/allstarw/workspace/own-proj/misc/maven/echo/biz/src/main/scripts

/Users/allstarw/workspace/own-proj/misc/maven/echo/biz/src/test/java

/Users/allstarw/workspace/own-proj/misc/maven/echo/biz/target/classes

/Users/allstarw/workspace/own-proj/misc/maven/echo/biz/target/test-classes

/Users/allstarw/workspace/own-proj/misc/maven/echo/biz/src/main/resources

/Users/allstarw/workspace/own-proj/misc/maven/echo/biz/src/test/resources

/Users/allstarw/workspace/own-proj/misc/maven/echo/biz/target

echo-biz-1.0.0

maven-clean-plugin

2.4.1

default-clean

clean

clean

maven-install-plugin

2.3.1

default-install

install

install

maven-resources-plugin

2.5

default-resources

process-resources

resources

default-testResources

process-test-resources

testResources

maven-surefire-plugin

2.10

default-test

test

test

maven-compiler-plugin

2.3.2

default-testCompile

test-compile

testCompile

default-compile

compile

compile

maven-jar-plugin

2.3.2

default-jar

package

jar

maven-deploy-plugin

2.7

default-deploy

deploy

deploy

对比biz项目的pom.xml,我们发现effective pom中增加了Super POM中继承过来的一些配置,比如说定义了biz项目的源码路径,以及Lifecycle中各个phase绑定的goal:

[phase] [goal]

compile maven-compiler-plugin:2.3.2:compile

package maven-jar-plugin:2.3.2:jar

install maven-install-plugin:2.3.1:install

… …

有了effective pom的概念之后,再来看maven构建的输出日志,是不是有点豁然开朗的感觉?

[INFO] Scanning for projects…

[INFO] ------------------------------------------------------------------------

[INFO] Reactor Build Order:

[INFO]

[INFO] echo

[INFO] echo-api

[INFO] echo-biz

[INFO]

[INFO] ------------------------------------------------------------------------

[INFO] Building echo 1.0.0

[INFO] ------------------------------------------------------------------------

[INFO]

[INFO] — maven-install-plugin:2.3.1:install (default-install) @ echo —

[INFO] Installing /Users/allstarw/workspace/own-proj/misc/maven/echo/pom.xml to /Users/allstarw/.m2/repository/org/maven/echo/1.0.0/echo-1.0.0.pom

[INFO]

[INFO] ------------------------------------------------------------------------

[INFO] Building echo-api 1.0.0

[INFO] ------------------------------------------------------------------------

[INFO]

[INFO] — maven-resources-plugin:2.5:resources (default-resources) @ echo-api —

[debug] execute contextualize

[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory /Users/allstarw/workspace/own-proj/misc/maven/echo/api/src/main/resources

[INFO]

[INFO] — maven-compiler-plugin:2.3.2:compile (default-compile) @ echo-api —

[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!

[INFO] Compiling 1 source file to /Users/allstarw/workspace/own-proj/misc/maven/echo/api/target/classes

[INFO]

[INFO] — maven-resources-plugin:2.5:testResources (default-testResources) @ echo-api —

[debug] execute contextualize

[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory /Users/allstarw/workspace/own-proj/misc/maven/echo/api/src/test/resources

[INFO]

[INFO] — maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ echo-api —

[INFO] No sources to compile

[INFO]

[INFO] — maven-surefire-plugin:2.10:test (default-test) @ echo-api —

[INFO] No tests to run.

[INFO] Surefire report directory: /Users/allstarw/workspace/own-proj/misc/maven/echo/api/target/surefire-reports


T E S T S


Results :

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-Df6H271L-1715828647790)]

[外链图片转存中…(img-gpRBM5Oi-1715828647791)]

[外链图片转存中…(img-AMaz3BOR-1715828647791)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值