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中放置什么来禁用这些标头并允许我们的代理缓存响应并将其返回?
答案 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
(当然,如果需要,请调整id
,central
适用于Maven使用的默认存储库。)
如果它不起作用(它应该),则替代方法是切换回HTTPClient Wagon并按照Advanced Configuration of the HttpClient HTTP Wagon中的说明对其进行配置。