maven从远程仓库下载依赖包失败(因权限问题导致)
背景
在学习rocketMq时,编译官方提供的可视化项目:rocketmq-dashboard,频频失败,报以下错误
Could not transfer artifact org.apache.rocketmq:rocketmq-namesrv:pom:4.9.3 from/to mirror (https://maven.aliyun.com/****/groups/public): /Users/****/repository/org/apache/rocketmq/rocketmq-namesrv/4.9.3/rocketmq-namesrv-4.9.3.pom.part.lock (No such file or directory)
先说结论
我遇到的是权限问题,不过还是推荐你先看看是不是下面这个文档里所出现的问题
如果上面的解决不了,那么在需要下载jar的项目下用命令的方式验证一下
mvn clean compile -Dmaven.test.skip=true -e -U
如果也出现了failed to create parent ,那么你也是权限的问题。简单的说就是,当前用户无法在root权限的目录下新建文件,确认一下当前用户是否拥有jar包的目录或者上级目录的权限
解决办法推荐以下两种
一是直接在命令上加上了sodu,即采用root权限
sudo mvn clean compile -Dmaven.test.skip=true -e -U
二是将对应的文件或者文件夹(比如整个maven仓库),修改为当前用户的权限
sudo chown -R $(whoami) 你的文件夹/
踩坑过程
第一时间,以为是阿里云仓库没有这个版本的jar包,于是当时一度在折腾maven源的配置,想着优先从阿里云下载,然后从中央仓库repo1或者repo2下载,结果从repo2也是这个错误
后来在aliyun的官网上发现存在这个版本的jar包,这下就肯定了一定是配置的问题
然后看到了很多和下面这个文档一样的解决思路
大致以下几类:
- Idea maven版本检查一致
- 因为ssl证书问题
即在importing和runner的vm option 添加以下的代码,跳过https
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true -DarchetypeCatalog=internal
- 因为本地存在lastUpdated之类的文件
但是我不属于这种情况,所以也不需要删除重下,况且我每次尝试都是删除整个文件夹再试
搭嘎,口头哇路。 因为以上的几种方案对我毫无作用
所以,我尝试获取更多的信息,之前都是在idea集成的maven侧边栏点刷新,现在我决定用命令试一试
mvn clean compile -Dmaven.test.skip=true -e -U
看到上面黄色框内的内容,我突然意识到有可能是权限的问题,我确认了一下路径
虽然我的maven目录是在User下,但是里面的jar包路径有很多都是root创建的(我也不知道怎么来的),但问题定位到了就好说了,搞半天不是maven的问题,而是权限的问题。
既然知道了是权限导致的,那么无论是将文件夹赋予当前用户权限,还是直接使用sudo都可以,我这边就直接使用sudo处理了。