问题
The default Maven settings for HTTP requests, such as the ones Maven uses to fetch artifacts from repositories, include the following headers:
Cache-control: no-cache
Cache-store: no-store
Pragma: no-cache
Expires: 0
Accept-Encoding: gzip
This seems to be the documented behavior. The default Maven wagon for HTTP (i.e., the "lightweight" client) does not seem to allow disabling these headers.
Why is Maven configured in this way by default? For artifacts that actually have versions, they should never change, right?
I work in an environment where many developers share a common HTTP proxy and this behavior means that developers never benefit from caching. And, we have dependencyManagement
on all of our dependencies and do not use SNAPSHOTs or other versions that might change, so it seems that caching should be safe.
What can I put in my settings.xml or pom.xml to disable these headers and allow our proxy to cache responses and return them?
回答1:
This seems to be the documented behavior. The default Maven wagon for HTTP (i.e., the "lightweight" client) does not seem to allow disabling these headers.
Actually, you can configure the Lightweight HTTP Wagon client using the available setters, for example (Maven 2.0+):
<servers>
<server>
<id>central</id>
<configuration>
<useCache>true</useCache>
</configuration>
</server>
</servers>
Or even override or provide additional HTTP headers (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>
This is nicely covered by Brett Porter in Configuring Maven HTTP Connections.
Why is Maven configured in this way by default?
Wild guess: it's a safe default to avoid problems with badly configured proxies (not really sure this is true).
What can I put in my settings.xml or pom.xml to disable these headers and allow our proxy to cache responses and return them?
The above settings go in the settings.xml
(of course, adapt the id
if required, central
is for the default repository used by Maven).
If it doesn't work (it should), the alternative would be to switch back to HTTPClient Wagon and to configure it as documented in the Advanced Configuration of the HttpClient HTTP Wagon.
References
- Configuring Maven HTTP Connections
- Advanced Configuration of the HttpClient HTTP Wagon
来源:https://stackoverflow.com/questions/4054884/why-does-maven-disable-caching-for-http-requests