Maven 如何与 Nexus 和 Artifactory 等不同存储库交互?
这是使用他们的 REST API 完成的吗?可以将依赖 Artifact 解析到实际位置以使用这些 API 获取它们,但这两个 API 彼此之间有些不同(据我所知 [Artifactory] [Nexus] )以及 Maven pom 文件中的存储库定义元素不包含用于声明存储库类型的属性。
那么Maven如何将artifact的groupId、artifactId和version解析为不同存储库中的实际文件呢?这些存储库是否实现了其他一些标准化 API,使 Maven 能够以与存储库无关的方式向它们请求文件?
最佳答案
您可以通过两种方式定义存储库来搜索 Artifact :
1) 在项目部分的 pom.xml 中
<project>
....
<repositories>
<repository>
...
<url>...</url>
</repository>
</repositories>
</project>
2) 和/或在文件 $USER_HOME$/.m2/settings.xml
中(WEB 上有很多示例)
Maven 通过使用存储库 URL 构建 Artifact 的 URL 并根据 Artifact 组、id、版本、类型和分类器附加路径来下载 Artifact 。并将groupId中的点转换为'/'
RepoUrl/groupId/artifactId/version/artifactId-version-classifier.type
示例:
https://repository.apache.org/content/repositories/releases/commons-io/commons-io/2.4/commons-io-2.4.jar
https://repository.apache.org/content/repositories/releases/commons-io/commons-io/2.4/commons-io-2.4-sources.jar
https://repository.apache.org/content/repositories/releases/commons-io/commons-io/2.4/commons-io-2.4-javadoc.jar
这是惯例,它独立于 Artifactory 或 Nexus。这是马文。一切都通过 HTTP 或 HTTPS 传输。此外,出于安全目的,Maven 还处理 MD5 和 SHA1 文件。
下载后, Artifact 将存储在工作站上的本地存储库中,位置为 $USER_HOME$/.m2/repositories
(其结构类似于远程存储库),充当缓存和代理。
通常,Artifactory 或 Nexus 是公司级别的本地缓存和代理,具有一些管理功能。当然,它们托管着公司开发人员发布的 Maven Artifact 。
看起来像 3 级存储库:本地 - 本地公司 - 全局
关于java - Maven 如何与不同的存储库交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11651088/