Why does Maven disable caching for HTTP requests?

主宰稳场 提交于 2020-01-14 08:40:17

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!