2

我最近在我的 Artifactory 实例上激活了安全性,这导致了几个问题。一个仍然存在,看起来有点奇怪:

Maven 使用 HTTP HEAD 来检查是否部署了新的 SNAPSHOT。但是,启用安全性后,第一次调用是在没有身份验证标头的情况下完成的,从而导致来自 Artifactory 的 401 响应。

然后,Maven 应该使用身份验证标头执行相同的调用。maven-metadata.xml文件就是这种情况。

但是对于.pom 和 .jar 文件,请求不会被重新尝试,如下面的日志所示:

20150303104244|3|REQUEST|xxx.xxx.xxx.xxx|non_authenticated_user|GET|/libs-snapshot-local/mycompany/common/common-config/1.0.4-SNAPSHOT/maven-metadata.xml|HTTP/1.1|401|0
20150303104244|12|REQUEST|xxx.xxx.xxx.xxx|user|GET|/libs-snapshot-local/mycompany/common/common-config/1.0.4-SNAPSHOT/maven-metadata.xml|HTTP/1.1|200|322
20150303104244|40|REQUEST|xxx.xxx.xxx.xxx|user|GET|/libs-snapshot-local/mycompany/common/common-config/1.0.4-SNAPSHOT/maven-metadata.xml.sha1|HTTP/1.1|200|40
20150303104244|4|REQUEST|xxx.xxx.xxx.xxx|user|GET|/libs-snapshot-local/mycompany/common/common-config/1.0.4-SNAPSHOT/maven-metadata.xml.md5|HTTP/1.1|200|32
20150303104245|2|REQUEST|xxx.xxx.xxx.xxx|non_authenticated_user|HEAD|/libs-snapshot-local/mycompany/myproject/myproject-interface/2.0.0-SNAPSHOT/myproject-interface-2.0.0-SNAPSHOT.jar|HTTP/1.1|401|0
20150303104245|2|REQUEST|xxx.xxx.xxx.xxx|non_authenticated_user|HEAD|/libs-snapshot-local/mycompany/myproject/myproject-interface/2.0.0-SNAPSHOT/myproject-interface-2.0.0-SNAPSHOT.jar|HTTP/1.1|401|0

如前所述,使用用户凭据重新尝试下载 maven-metadata.xml 文件,但myproject-interface-2.0.0-SNAPSHOT.jar没有。

我试图为该服务器启用抢先身份验证,但我找不到 Maven 行为的任何变化:

    <server>
        <id>snapshot</id>
        <username>user</username>
        <password>xxx</password>
        <configuration>
            <httpConfiguration>
                <all>
                    <usePreemptive>true</usePreemptive>
                    <params>
                        <property>
                            <name>http.authentication.preemptive</name>
                            <value>%b,true</value>
                        </property>
                    </params>
                </all>
            </httpConfiguration>
        </configuration>
    </server>

这仅涉及现有 SNAPSHOT 的更新,因为下载新工件是使用包含身份验证标头的 HTTP GET 完成的(至少重试)。这仍然会阻止正确使用 SNAPSHOT 工件。

我正在使用 Maven 3.2.1 和 Artifactory 3.4.2。

4

2 回答 2

2

对于其他希望在默认情况下启用抢先式身份验证的人:

Maven 主站点上有关此设置的文档是错误的。我花了一段时间追踪它,但最终在我在下面复制的开放错误票上找到了答案。这适用于 OS X 上的 Maven 3.1.1。

<servers>
 <server>
  <id>serverid</id>
  <username>myuser</username>
  <password>mypassword</password>
  <configuration>
   <wagonProvider>httpclient</wagonProvider>
   <httpConfiguration>
    <all>
     <usePreemptive>true</usePreemptive>
    </all>
   </httpConfiguration>
  </configuration>
 </server>
</servers>
于 2016-06-02T18:05:00.897 回答
1

这与 Artifactory 快照存储库中“Maven 快照版本行为”选项的使用有关。

如此处所述,Maven 3 不再支持此选项

Maven 3 仅支持唯一快照

Maven 3 已经放弃了对解析和部署非唯一快照的支持。因此,如果您有一个使用非唯一快照的快照存储库,我们建议您将 Maven 快照策略更改为“唯一”并从该存储库中删除任何以前部署的快照。Maven 客户端在部署时生成的唯一快照名称无法帮助识别构建快照的源代码控制更改,并且与签出源的时间无关。因此,我们建议工件本身应嵌入修订/标签(作为其名称的一部分或在内部),以便清晰可见的修订跟踪。Artifactory 允许您使用修订号标记工件,作为其构建集成支持的一部分。

切换到Unique解决了这个问题。

于 2015-03-04T14:43:32.283 回答