【问题标题】:How to configure settings.xml to pull from Artifactory private virtual repository?如何配置 settings.xml 以从 Artifactory 私有虚拟存储库中提取?
【发布时间】:2016-02-10 21:39:45
【问题描述】:

我是一名 Apache Archiva 资深人士,最近改用 Artifactory Pro。我一直在尝试在 Artifactory 中复制我在 Archiva 中实现虚拟私有存储库的设置。最终结果应该是不同的团队可以访问他们自己团队的工件、远程存储库、默认本地存储库和公司范围的存储库。

但是,每当我将 Maven settings.xml 配置为使用我的私有虚拟存储库时,我都无法仅下载 一些 依赖项,这些依赖项可在 Maven Central 上使用并从中提取。如果我使用 Artifactory 的默认 settings.xml(libs-release、libs-snapshot、plugins-release、plugins-snapshot 和无虚拟存储库),那么我可以下载 Maven Central 上可用且我的项目需要的所有依赖项。

我在 Windows server 2012 虚拟服务器中的他们提供的 Tomcat 上运行 Artifactory v4.4.2。我没有在代理后面运行。我对 Archiva 没有这样的问题。

关于我的私有虚拟存储库设置,我有一个名为“test”的虚拟存储库,它是一种“通用”包类型。该存储库包括以下存储库:

  • 远程仓库
  • 库发布
  • 库快照
  • 插件发布
  • 插件快照
  • 本地测试发布
  • 本地测试快照
  • 公司发布本地
  • 公司快照本地

列出的前 5 个存储库是 Artifactory 提供的默认虚拟存储库存储库。列出的最后 4 个存储库是本地存储库,它们属于通用包类型。

我想我应该用一面镜子。

这是我正在使用的示例 settings.xml(我的用户名和密码填充在生成的 settings.xml 中,我保存到我的 Maven conf 文件夹中):

<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <servers>
    <server>
      <username>${security.getCurrentUsername()}</username>
      <password>${security.getEscapedEncryptedPassword()!"*** Insert encrypted password here ***"}</password>
      <id>central</id>
    </server>
    <server>
      <username>${security.getCurrentUsername()}</username>
      <password>${security.getEscapedEncryptedPassword()!"*** Insert encrypted password here ***"}</password>
      <id>snapshots</id>
    </server>
  </servers>
  <mirrors>
    <mirror>
      <mirrorOf>*</mirrorOf>
      <name>test</name>
      <url>http://localhost:8082/artifactory/test</url>
      <id>test</id>
    </mirror>
  </mirrors>
  <profiles>
    <profile>
      <repositories>
        <repository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>libs-release</name>
          <url>http://localhost:8082/artifactory/libs-release</url>
        </repository>
        <repository>
          <snapshots />
          <id>snapshots</id>
          <name>libs-snapshot</name>
          <url>http://localhost:8082/artifactory/libs-snapshot</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>plugins-release</name>
          <url>http://localhost:8082/artifactory/plugins-release</url>
        </pluginRepository>
        <pluginRepository>
          <snapshots />
          <id>snapshots</id>
          <name>plugins-snapshot</name>
          <url>http://localhost:8082/artifactory/plugins-snapshot</url>
        </pluginRepository>
      </pluginRepositories>
      <id>artifactory</id>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>artifactory</activeProfile>
  </activeProfiles>
</settings>

我无法通过我的虚拟存储库从 Maven Central 提取的工件示例是 poi-ooxml-schemas-3.10-FINAL.jar 或许多 Apache Maven 插件。删除镜像部分后,我可以从 Maven Central 下载所有依赖项。这对我来说毫无意义。我的虚拟存储库配置为包含远程存储库虚拟存储库,因此应该能够从 Maven Central 中提取所有内容。

我做错了什么?

【问题讨论】:

  • 我应该提一下,我已经从 remote-repos 虚拟存储库中禁用并删除了 jcenter 本地存储库。我在下载 Maven Central 上存在的一些依赖项时遇到了问题。我将其替换为直接指向 Maven Central 的新本地存储库。
  • 调试此类问题的最佳方法是发送跟踪请求。这将准确地向您展示 Artifactory 为解决依赖关系而在幕后所做的事情。例如localhost:8082/artifactory/test/org/apache/poi/…

标签: java maven maven-2 maven-3 artifactory


【解决方案1】:

嗯,这里的实际情况似乎是this is a bug,它与通用虚拟存储库的预定义layout 相关。 在解决此问题之前,建议的解决方法是基于简单默认布局创建新的存储库布局。 所以,而不是简单的默认布局: [orgPath]/[module]/[module]-[baseRev](-[fileItegRev]).[ext]

应该创建一个如下所示的新布局: [orgPath]/[module]/[module]-[baseRev].[ext]

创建此新的存储库布局后,您可以将已定义的存储库布局更改为新创建的布局。

这将解决您提到的行为。

【讨论】:

    【解决方案2】:

    好的。我自己找到了部分答案,并通过 JFrog 支持人员的帮助找到了另一部分答案。

    这是我发现的第一组问题:

    1. 我注意到,如果我将 Generic 类型的虚拟存储库与 Generic 类型的本地存储库一起使用,那么工件检索将下载我的 pom 的大部分依赖项,但不会下载所有依赖项。
    2. 我注意到,如果我使用 Generic 类型的虚拟存储库和 Maven 类型的本地存储库,则工件检索将下载我的 pom 的大部分依赖项,但不会下载所有依赖项。

    这些问题对我来说似乎是错误。

    所以,我最终定义了一个虚拟存储库(在下面的配置中命名为 test-maven)和两个本地存储库,它们都是 Maven 类型。这两个本地存储库包含在虚拟存储库中。

    我想出了一个可行的 settings.xml,但它使用的是 Mirror,JFrog 支持告诉我这不是最佳实践。牢记这一建议,这是适合我的最终 settings.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <servers>
        <server>
          <username>USERNAME</username>
          <password>PASSWORD</password>
          <id>test-maven</id>
        </server>
      </servers>
      <profiles>
        <profile>
          <repositories>
            <repository>
              <snapshots />
              <id>test-maven</id>
              <name>test-maven</name>
              <url>http://localhost:8082/artifactory/test-maven</url>
            </repository>
          </repositories>
          <pluginRepositories>
            <pluginRepository>
              <snapshots />
              <id>test-maven</id>
              <name>test-maven</name>
              <url>http://localhost:8082/artifactory/test-maven</url>
            </pluginRepository>
          </pluginRepositories>
          <id>artifactory</id>
        </profile>
      </profiles>
      <activeProfiles>
        <activeProfile>artifactory</activeProfile>
      </activeProfiles>
    </settings>
    

    使用这个配置,我验证我可以下载所有发布到 Maven Central 的工件、进一步的远程存储库、来自本地快照 Maven 存储库的快照,以及来自本地快照 Maven 存储库的发布。此设置允许我使用每个开发团队的私有存储库。

    【讨论】:

      【解决方案3】:

      删除镜像部分后,我可以从 Maven Central 下载所有依赖项。

      您无法访问镜像,因为您没有指定要使用的凭据。 (另外你没有启用匿名访问)

      发件人:https://www.jfrog.com/confluence/display/RTF/Maven+Repository#MavenRepository-ConfiguringAuthentication

      文件中指定的每个 元素都必须有一个对应的 元素和一个匹配的 元素,该元素指定用户名和密码。

      你镜像的 id 是 test。所以你需要为它添加另一个服务器条目:

      <servers>
          <server>
              <username>USERNAME</username>
              <password>PASSWORD</password>
              <id>test-maven</id>
          </server>
          <server>
              <!-- credentials for mirror -->
              <username>USERNAME</username>
              <password>PASSWORD</password>
              <id>test</id>
          </server>
      </servers>
      

      Artifactory 用于创建 settings.xml 文件的“设置我”功能不会自动为镜像添加 条目,这有点烦人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-05
        • 2018-10-07
        • 2018-09-22
        • 2018-05-20
        • 1970-01-01
        相关资源
        最近更新 更多