1

我有两个私人 JFrog 存储库设置。一个存储库处理发布,另一个处理快照。这是我在settings.xml文件中定义的方式。

<settings>

    <activeProfiles>
        <activeProfile>default</activeProfile>
    </activeProfiles>

    <servers>
        <server>
            <id>central</id>
            <username>private-repo-username</username>
            <password>private-repo-password</password>
        </server>
        <server>
            <id>snapshots</id>
            <username>private-repo-username</username>
            <password>private-repo-password</password>
        </server>
    </servers>

    <profiles>
        <profile>
            <id>default</id>
            <repositories>
                <repository>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                    <id>central</id>
                    <name>a0d2olsx0t222-artifactory-primary-0-releases</name>
                    <url>https://my-private-repo.jfrog.io/artifactory/libs-release</url>
                </repository>
                <repository>
                    <id>snapshots</id>
                    <name>a0d2olsx0t222-artifactory-primary-0-snapshots</name>
                    <url>https://my-private-repo.jfrog.io/artifactory/libs-snapshot</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
    </profiles>
</settings>

我的多模块 Maven 项目中的多个内部依赖项出现此错误:

[ERROR] Failed to execute goal on project platform-utils: Could not resolve dependencies for project
design.colspalinva:platform-utils:jar:2.2.1-SNAPSHOT: The following artifacts could not be resolved: 
com.maxmind.geoip2:geoip2:jar:2.12.0, org.apache.ant:ant:jar:1.10.5: Could not find artifact 
com.maxmind.geoip2:geoip2:jar:2.12.0 in central (https://my-private-repo.jfrog.io/artifactory/libs-
release) -> [Help 1]

从表面上看,Maven 似乎并没有尝试联系官方 Maven Central 存储库来获取这些依赖项,而是在我的私有存储库上失败了。我的印象是,如果私有存储库不包含特定的工件,它将尝试联系 Maven Central。

从 Maven Central 下载我的 Spring 依赖项没有问题。

4

2 回答 2

1

您共享的 Maven settings.xml 配置似乎没问题。您正在覆盖Maven 的内置中央和快照存储库,这是确保 Maven 默认将请求发送到 Artifactory 的正确方法。
如另一个答案中所建议的,添加Mirror Any设置意味着除了覆盖内置的 Maven 存储库之外,您还可以使用 Mirror Any 设置通过 Artifactory 将所有请求重定向到 Maven 存储库,包括那些在插件的 POM 中定义的请求-ins 和第三方依赖项。

根据您共享的日志,Maven 确实尝试通过 Artifactory 解决工件 - https://my-private-repo.jfrog.io/artifactory/libs-release
该问题似乎与解决特定工件有关在神器中。
我假设 libs-release 是一个虚拟Maven 存储库,并且它包含至少一个指向 Jcenter 或 Maven Central 的远程Maven 存储库(如果不是,请从查看Maven Repositories开始)。
要调试问题:

(1) 尝试使用 cURL 或 Web 浏览器直接从 Artifactory 解析工件,例如:

curl -Uuser:pass https://my-private-repo.jfrog.io/artifactory/libs-release/com/maxmind/geoip2/geoip2/2.12.0/geoip2-2.12.0.jar  

(2) 如果您设法解决了工件,则意味着 Artifactory 已正确配置并且 Maven 应该能够解决。如果没有,请尝试查找执行跟踪的原因,例如:

curl -Uuser:pass https://my-private-repo.jfrog.io/artifactory/libs-release/com/maxmind/geoip2/geoip2/2.12.0/geoip2-2.12.0.jar?trace
于 2020-11-26T09:56:21.980 回答
1

如果您想将所有中央的访问从 Maven 重定向到您自己的存储库管理器,您必须配置settings.xml如下:

<! language:language-xml ->
<?xml version="1.0" encoding="UTF-8"?>
<settings
   xmlns="http://maven.apache.org/SETTINGS/1.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                          https://maven.apache.org/xsd/settings-1.0.0.xsd">
   <mirrors>
      <mirror>
         <id>nexus</id>
         <mirrorOf>*</mirrorOf>
         <url>http://IP:PORT/repository/repo</url>
      </mirror>
   </mirrors>
   <profiles>
      <profile>
         <id>nexus</id>
         <repositories>
            <repository>
               <id>central</id>
               <url>http://central</url>
               <releases>
                  <enabled>true</enabled>
                  <updatePolicy>never</updatePolicy>
                  <checksumPolicy>fail</checksumPolicy>
               </releases>
               <snapshots>
                  <enabled>true</enabled>
                  <updatePolicy>always</updatePolicy>
                  <checksumPolicy>fail</checksumPolicy>
               </snapshots>
            </repository>
         </repositories>
         <pluginRepositories>
            <pluginRepository>
               <id>central</id>
               <url>http://central</url>
               <releases>
                  <enabled>true</enabled>
                  <updatePolicy>never</updatePolicy>
                  <checksumPolicy>fail</checksumPolicy>
               </releases>
               <snapshots>
                  <enabled>true</enabled>
                  <updatePolicy>always</updatePolicy>
                  <checksumPolicy>fail</checksumPolicy>
               </snapshots>
            </pluginRepository>
         </pluginRepositories>
      </profile>
   </profiles>
   <activeProfiles>
      <!--make the profile active all the time -->
      <activeProfile>nexus</activeProfile>
   </activeProfiles>
</settings>
于 2020-11-22T20:44:28.640 回答