代码之家  ›  专栏  ›  技术社区  ›  Chris Harris

如何配置设置。xml从Artifactory私有虚拟存储库中提取?

  •  6
  • Chris Harris  · 技术社区  · 9 年前

    我是一名Apache Archiva老兵,最近转投Artifactory Pro。我一直试图在Artifactory中复制一个设置,我在Archiva中实现了虚拟的私有存储库。最终结果应该是,不同的团队可以访问自己团队的工件、远程存储库、默认本地存储库和公司范围的存储库。

    但是,仅下载时遇到问题 一些 当我配置Maven设置时,可以在Maven Central上获取并从中提取依赖项。xml来使用我的私有虚拟存储库。如果我使用Artifactory的默认设置。xml(libs发布、libs快照、插件发布、插件快照和无虚拟存储库),然后我可以下载Maven Central上可用的所有依赖项以及我的项目所需的依赖项。

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

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

    • 远程回购
    • libs版本
    • libs快照
    • 插件发布
    • 插件快照
    • 本地测试发布
    • 本地测试快照
    • 公司发布本地
    • 公司快照本地

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

    我想我应该用镜子。

    下面是一个示例设置。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-oxml-schemas-3.10-FINAL。jar或许多Apache Maven插件。一旦我删除了镜像部分,我就可以从Maven Central下载所有依赖项。这对我来说毫无意义。我的虚拟存储库被配置为包括远程存储库虚拟存储库,因此应该能够从Maven Central中提取所有内容。

    我做错了什么?

    3 回复  |  直到 2 年前
        1
  •  6
  •   eranb    9 年前

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

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

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

    这将修复您提到的行为。

        2
  •  5
  •   Chris Harris    9 年前

    O、 K.我自己找到了答案的一部分,另一部分是通过JFrog支持人员的帮助找到的。

    以下是我发现的第一组问题:

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

    这些问题在我看来像虫子。

    因此,我最终定义了一个虚拟存储库(在下面的配置中命名为testmaven)和两个本地存储库,所有这些都是maven类型。两个本地存储库包含在虚拟存储库中。

    我想出了一个设置。xml是有效的,但它使用的是Mirror,JFrog支持告诉我这不是最佳做法。记住这个建议,这里是最后的设置。适用于我的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存储库的快照以及本地快照Mavin存储库中的版本。这个设置允许我利用每个开发团队的私有存储库。

        3
  •  0
  •   jreedick    7 年前

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

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

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

    每个<存储库>并且<镜像>文件中指定的元素必须具有相应的<服务器>具有匹配<标识>它指定用户名和密码。

    你镜子的id是测试。因此,您需要为其添加另一个服务器条目:

    <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的“设置我”功能用于创建设置,这有点烦人。xml文件不添加<服务器>自动进入后视镜。