1、问题背景
新搭建了一个Artifactory环境大体上都没有什么问题。但就是在执行mvn指令时无法获取通过mvn deploy部署到Artifactory的snapshot包。
2、分析解决
a、并没有下载有时间后缀的文件jar
maven下载时直接下载1.0-SNAPSHOT/xxxx-1.0-SNAPSHOT.jar,我手动在浏览器中访问是404。
这就奇怪了仓库中并不存在这的jar。应该全都是xxxx-1.0-20121116.101908-1.jar这种形式的。
b、由maven-metadata.xml决定下载哪个快照
maven首先会下载1.0-SNAPSHOT/中的maven-metadata.xml文件来判断仓库上最新的SNAPSHOT是哪一个。
手动访问maven-metadata.xml还是404。我一直以为Artifactory会自动搞定,原来也是这样搞定的。
c、比较新旧Artifactory权限
直觉告诉我可能是权限问题,因为Artifactory搭建完后,要设置Deploy权限给Remote资源,并授权Deploy权限给有权限上传用户(或持续集成用户,因为我用的是bamboo)。
比较新旧权限,发现有一处配置不同就是新环境并没有给有Deploy权限的用户也加上Annotate权限。
因为加入Deploy权限后就已经可以执行mvn deploy指令。所以没在意Annotate。
d、加权并mvn deploy测试
加上Annotate权限再执行mvn deploy,浏览器访问maven-metadata.xml文件不再是404了。
xxx.xxx.xxx
xxx-xxx
1.0-20121122.110600-1
20121128.065640
1
20121128065641
pom
1.0-20121122.110600-1
20121122110600
javadoc
jar
1.0-20121128.065640-1
20121128065640
sources
jar
1.0-20121122.062603-1
20121122062603
jar
1.0-20121128.065640-1
20121128065640
其他用户再mvn xxx都可以正常访问SNAPSHOT资源。
3、总结
看来还是要认真看一看Artifactory权限说明和手册。
Artifactory的权限说明
Read - Allows reading/downloading artifacts.
Annotate - Allows annotating artifacts and folders with metadata and properties.
Deploy - Allows deploying artifacts and deploying to caches (populate them with remote artifacts).
Delete - Allows deleting or overwriting artifacts.
Admin - Allows adding permissions to other users on this permission target.