前情提要
由于太久没有管理资料,而且最近面试新人的时候有不少人都有把自己项目部署到自己云服务器的经验,于是我也回去将自己以前做过的项目一并打包并且尝试上传,遇到以下问题就记录一下
项目配置:
-
jdk:1.8
-
Maven:3.8.3
-
项目结构:
- XinGuanParent:父级模块
- XinGuanCommon:子模块(公共信息模块)
- XinGuanWeb:子模块(操作模块,应用启动)
-
子模块继承父模块的依赖
问题描述1
'parent.relativePath':无法找到正确的父级pom文件
原因
子类模块无法正确的引用父类模块中的pom.xml
relativePath:是Maven为了寻找父模块pom.xml所额外增加的一个寻找路径(默认值是"../pom.xml") 根据mavae对xml的描述可知
relativePath的引入规则:
- 先从工程里面有依赖的相关模块中找你引入的parent的pom.xml
- 从你指定的relativePath的路径中寻找pom.xml,如果是
<relativePath />则指定为空,就会为默认值,则从上级文件中找pom.xml - 如果步骤1,2都找不到,那么就会到本地库(local respository)寻找
- 如果本地库也找不到,那么就会到远程库中寻找
- 如果都找不到,那么就会报错
如图所示
在<relagtivePath>中规定了对应的地址时,那么就会直接从指定地址取pom.xml
但如数地址为pom.xml时,则读取的值为当前模块下的的pom.xml
解决方法:
所以在寻找路径为正确的时候,报错解决
问题描述二2
Could not find artifact xxxxxx:无法找到项目xxxxx
原因
由于模块间的继承关系,项目的子包是依赖父包的快照文件的,但由于包快照文件不存在时,maven就会先去找本地仓库是否存在该快照文件,如果本地仓库不存在的话,就会向远程仓库请求该父包快照文件,如果本地仓库和远程仓库都找不到就会报错。
什么是快照(引用w3cschools在线对快照的解释):
SNAPSHOT 是一个特殊版本,表示当前的开发副本。 与常规版本不同,Maven 在每次构建时都会在远程存储库中检查新的 SNAPSHOT 版本。
为什么要用快照
大型软件应用程序通常由多个模块组成,并且多个团队正在开发同一应用程序的不同模块的常见场景。
例如,假设一个团队正在以 app-ui 项目 (app-ui.jar:1.0) 的形式开发应用程序的前端,并且他们正在使用数据服务项目 (data-service.jar:1.0)。 现在可能发生的情况是,从事数据服务的团队正在快速进行错误修复或增强,他们几乎每隔一天就会将库发布到远程存储库。 现在如果数据服务团队每隔一天上传一个新版本,就会出现以下问题
- 每次发布更新代码时,数据服务团队都应告知 app-ui 团队。
- app-ui 团队需要定期更新他们的 pom.xml 以获得更新的版本。 为了处理这种情况,SNAPSHOT 快照概念开始发挥作用。
本项目的快照
解决方法
勾选常更新快照