java - Maven 如何与不同的存储库交互?

标签 java maven nexus artifactory

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/

相关文章:

java - 如何在 ActionListener 的 actionPerformed 中传递 for 循环索引 [Java]

java - 具有泛型类型的 ViewModel

java - 将 float[] 发送到服务器

Maven 发布插件 : Permission denied (publickey) Github

java - `mvn package` 给出 fatal error 编译 : invalid flag: -parameters error

java - 了解 Maven 存储库和 Artifactory(如 Nexus)

centos7 - Sonatype Nexus - 我可以手动压缩 blob 存储吗?

使用 FixedThreadPool(s) 和队列的 Java 设计

Nexus OSS 3.0.2-02 正在初始化但未启动

maven - 在 buildnumber-maven-plugin 中切换 git 提供程序