6

HTTP 请求的默认 Maven 设置,例如 Maven 用于从存储库中获取工件的设置,包括以下标头:

Cache-control: no-cache
Cache-store: no-store
Pragma: no-cache
Expires: 0
Accept-Encoding: gzip

这似乎是记录在案的行为。HTTP 的默认 Maven wagon(即“轻量级”客户端)似乎不允许禁用这些标头。

为什么Maven默认是这样配置的?对于实际有版本的工件,它们永远不应该改变,对吧?

我在许多开发人员共享一个公共 HTTP 代理的环境中工作,这种行为意味着开发人员永远不会从缓存中受益。而且,我们拥有dependencyManagement所有依赖项,并且不使用 SNAPSHOT 或其他可能更改的版本,因此缓存似乎应该是安全的。

我可以在我的 settings.xml 或 pom.xml 中添加什么来禁用这些标头并允许我们的代理缓存响应并返回它们?

4

1 回答 1

7

这似乎是记录在案的行为。HTTP 的默认 Maven wagon(即“轻量级”客户端)似乎不允许禁用这些标头。

实际上,您可以使用可用的设置器配置轻量级 HTTP Wagon客户端,例如(Maven 2.0+):

<servers>
  <server>
    <id>central</id>
    <configuration>
      <useCache>true</useCache>
    </configuration>
  </server>
</servers>

甚至覆盖或提供额外的 HTTP 标头(Maven 2.1+):

<server>
  <id>central</id>
  <configuration>
    <httpHeaders>
      <property>
        <name>User-Agent</name>
        <value>Internal-Build-System/1.0</value>
      </property>
    </httpHeaders>
  </configuration>
</server>

Brett Porter 在配置 Maven HTTP 连接中很好地介绍了这一点。

为什么Maven默认是这样配置的?

疯狂的猜测:这是一个安全的默认值,可以避免配置错误的代理出现问题(不太确定这是真的)。

我可以在我的 settings.xml 或 pom.xml 中添加什么来禁用这些标头并允许我们的代理缓存响应并返回它们?

上面的设置都进去了settings.xml(当然,id如果需要,调整一下,central是针对Maven使用的默认仓库)。

如果它不起作用(它应该),另一种方法是切换回HTTPClient Wagon并按照HttpClient HTTP Wagon 的高级配置中的说明对其进行配置。

参考

于 2010-10-30T01:57:15.943 回答