Por que o MAVEN desative o armazenamento em cache para solicitações HTTP?
Pergunta
As configurações padrão do Maven para solicitações HTTP, como as que o Maven usa para buscar artefatos de repositórios, incluem os seguintes cabeçalhos:
Cache-control: no-cache
Cache-store: no-store
Pragma: no-cache
Expires: 0
Accept-Encoding: gzip
Este parece ser o comportamento documentado. O vagão Maven padrão para HTTP (ou seja, o cliente "leve") não parece permitir desativar esses cabeçalhos.
Por que o MAVEN é configurado dessa maneira por padrão? Para artefatos que realmente têm versões, eles nunca devem mudar, certo?
Trabalho em um ambiente em que muitos desenvolvedores compartilham um proxy HTTP comum e esse comportamento significa que os desenvolvedores nunca se beneficiam do cache. E nós temos dependencyManagement
Em todas as nossas dependências e não use instantâneos ou outras versões que possam mudar, por isso parece que o cache deve ser seguro.
O que posso colocar nas minhas configurações.
Solução
Este parece ser o comportamento documentado. O vagão Maven padrão para HTTP (ou seja, o cliente "leve") não parece permitir desativar esses cabeçalhos.
Na verdade, você posso configure o Vagão leve HTTP Cliente usando os Setters disponíveis, por exemplo (Maven 2.0+):
<servers>
<server>
<id>central</id>
<configuration>
<useCache>true</useCache>
</configuration>
</server>
</servers>
Ou até mesmo substituir ou fornecer cabeçalhos HTTP adicionais (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>
Isso é bem coberto por Brett Porter em Configurando conexões Maven HTTP.
Por que o MAVEN é configurado dessa maneira por padrão?
Guess Wild: é um padrão seguro para evitar problemas com proxies mal configurados (não tenho certeza de que isso é verdade).
O que posso colocar nas minhas configurações.
As configurações acima vão no settings.xml
(é claro, adaptar o id
se necessário, central
é para o repositório padrão usado pelo maven).
Se não funcionar (deveria), a alternativa seria voltar para Vagão httpclient e configurá -lo como documentado no Configuração avançada do vagão http httpclient.