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 在我们所有的依赖项上,并且不使用快照或其他可能更改的版本,因此看来缓存应该是安全的。

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

有帮助吗?

解决方案

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

其实,你 配置 轻量级 HTTP 货车 客户端使用可用的设置器,例如(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 使用的默认存储库)。

如果它不起作用(应该),另一种选择是切换回 HTTP客户端马车 并按照中记录的方式配置它 HttpClient HTTP Wagon 的高级配置.

参考

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top