【问题标题】:How artifactory handles Releases/ snapshots policy?工件如何处理发布/快照策略?
【发布时间】:2016-10-17 06:27:43
【问题描述】:
使用 Artifactory OSS 版本 4.2.1。我的 libs-release-local 存储库设置为仅处理版本。根据这种情况,每当有人尝试使用 gradle 将 SNAPSHOT(1.3-SNAPSHOT/sample-war-app-1.3-SNAPSHOT.jar) 文件部署到此文件夹中时,由于其快照/发布处理策略,它应该抛出错误 409。但是有时,其中一些文件会部署到版本中。有人可以解释一下 artifactory 如何识别版本和快照吗?
【问题讨论】:
标签:
gradle
artifactory
gradlew
gradle-plugin
【解决方案1】:
Artifactory 使用正则表达式将您的部署路径与标准 maven 存储库布局相匹配。假设工件的部署路径与此正则表达式匹配,Artifactory 将能够标记路径并计算出每个路径元素代表的内容(即 groupId、artifactId、版本等)。您可以阅读有关存储库布局的更多信息here。
release/snapshot 处理能力是建立在这个机制之上的,因为它需要知道路径中的 version 元素是否代表一个快照版本(否则它是一个发布版本),然后根据它拒绝或接受部署对repo的处理政策。
maven 存储库使用的默认 'maven-2-default' 布局(例如 'libs-release-local' 存储库)为快照定义了这个正则表达式标识符:
SNAPSHOT|(?:(?:[0-9]{8}.[0-9]{6})-(?:[0-9]+))
(您可以在 Admin -> Layouts(在 Repositories 下)-> maven-2-default 中找到它
所以一个有效的快照路径可以是:
否则,如果路径与 maven 布局不对应,Artifactory 将无法知道您上传的工件是快照工件还是发布工件,在这种情况下,您最终可能会得到快照或发布工件不应该在哪里,但这也意味着您不是根据存储库布局部署它们。
如果您单击相应的布局进行编辑并使用“测试工件路径解析”部分,您还可以验证部署路径。如果您正在验证快照路径,并且您发现 Artifactory 无法识别给定路径中工件的“文件集成修订版”,或者它错误地解释了路径,这将是一个强大的指示处理策略功能也无法正常工作。