为什么Maven禁用HTTP请求的缓存?

时间:2010-10-29 18:45:29

标签: http maven-2 wagon

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

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

这似乎是documented behavior。 HTTP的默认Maven旅行车(即“轻量级”客户端)似乎不允许禁用这些标头。

为什么Maven默认以这种方式配置?对于实际拥有版本的工件,它们永远不会改变,对吧?

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

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

1 个答案:

答案 0 :(得分:7)

  

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

实际上,可以使用可用的setter配置Lightweight 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在Configuring Maven HTTP Connections中很好地介绍了这一点。

  

为什么Maven默认以这种方式配置?

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

  

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

以上设置位于settings.xml(当然,如果需要,请调整idcentral适用于Maven使用的默认存储库。)

如果它不起作用(它应该),则替代方法是切换回HTTPClient Wagon并按照Advanced Configuration of the HttpClient HTTP Wagon中的说明对其进行配置。

参考