ai 父项目下包含 bigdata, carpool, queue-passenger, order-hall四个子项目,互相独立,但某天运维平台突然发生了一件奇怪的事儿,queue-passenger和order-hall无法正常编译,错误原因如下:
6:37:25,971 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.5.2:install (default-install) on project dispatcher-carpooling: Failed to install metadata com.sq.ai.dispatcher:dispatcher-carpooling:1.0-SNAPSHOT/maven-metadata.xml: Could not parse metadata /u01/maven3/.m2/repository/com/sq/ai/dispatcher/dispatcher-carpooling/1.0-SNAPSHOT/maven-metadata-local.xml: in epilog non whitespace content is not allowed but got s (position: END_TAG seen ...\ns... @25:2) -> [Help 1]
异常的大概意思是在本地install dispatcher-carpooling-1.0-SNAPSHOT时,生成的maven-metadata-local.xml文件中含有特殊字符,导致编译中断,停止。
百度后,大体的结论是maven在生成maven-metadata-local.xml时,因网络等原因,导致字符错误。解决方法是删除机器文件maven-metadata-local.xml,重新编译即可。
运维同学在编译机上找到maven-metadata-local.xml后并删除,确实解决了问题。
但是疑惑是在构建queue-passenger或order-hall时,为什么会构建carpool项目?两者是平等的兄弟关系,不存在依赖。而bigdata项目的构建竟然不受carpool的影响。
在运维平台,仔细对比maven命令时发现,
bigdata 项目构建命令 clean install -U -Dmaven.test.skip=true -pl dispatcher-bigdata -am
queue-passenger构建命令 clean install -DskipTests -U -e
order-hall构建命令 clean install -DskipTests -U -e
结论: pl参数指定构建子项目dispatcher-bigdata,am参数表示级联构建dispatcher-bigdata关联的项目 -U表示每次构建时强制重拉关联jar包的快照版本。如果没有pl参数,则构建父项目下的所有子项目。
参数的详细说明参见https://www.cnblogs.com/hiver/p/7850954.html