Recentemente, o Apache Maven parece estar tendo problemas de cache. A realização de instalações limpas em nossos projetos usando o Windows Vista ou o Windows 7 às vezes produz artefatos com os mesmos dados de uma compilação anterior, mesmo que os arquivos do artefato mais recente devam ter sido atualizados.
Existe alguma maneira de limpar esse cache para forçar o maven a sempre acionar uma compilação limpa do artefato local que deve ser construído?
Em particular, estamos tendo problemas para criar um aplicativo da web com o plug-in war. A versão do Maven é 3.0.3. A versão do plugin War é 2.1.1.
-U
sinalizador que atualizará os artefatos?mvn clean install
colocar os novos artefatos no repositório local?mvn clean install -Dmaven.repo.local=/alternate/repo/location
Respostas:
Exclua os artefatos (ou o repositório local completo)
c:\Users\<username>\.m2\repository
manualmente.fonte
The action can't be completed because the folder or file in it is open in another program. Close the folder or file and try again.
mvn dependency:purge-local-repository
finalmente funcionouPara limpar o cache local, tente usar o plug-in de dependência.
mvn dependency:purge-local-repository
: Esta é uma tentativa de excluir os arquivos do repositório local, mas ele sempre vai e preenche o repositório local depois que as coisas são removidas.mvn dependency:purge-local-repository -DreResolve=false
: Isso evita a resolução das dependências, mas parece ainda ir à rede às vezes.mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false
: Isso foi adicionado por Paweł Prażak e parece funcionar bem. Eu usaria o terceiro se você quiser que o repositório local seja esvaziado, e o primeiro se você quiser apenas jogar fora o repositório local e obter as dependências novamente.fonte
<User_Name>/.m2
local. Não tenho certeza se seria o motivo.Você verificou / alterou as configurações de updatePolicy para seus repositórios no seu
settings.xml
.Tente configurá-lo para
always
.fonte
<updatePolicy>
no meu pom.xml, mas não há<snapshotPolicy>
Eu faria o seguinte:
Os sinalizadores informam ao maven para não tentar resolver dependências ou acessar a rede. Exclua o que você vê localmente.
E, por uma boa medida, ignore os erros (
--fail-at-end
) até o fim. Às vezes, isso é útil para projetos que possuem um conjunto de dependências um tanto bagunçado ou dependem de um repositório interno um tanto bagunçado (isso acontece).fonte
Isso funciona no Spring Tool Suite v 3.1.0.RELEASE, mas acho que também está disponível no Eclipse.
Depois de excluir os artefatos manualmente (conforme declarado por palacsint acima) no
/username/.m2
diretório, indexe novamente os arquivos da seguinte maneira:Vamos para:
Windows->Preferences->Maven->User Settings
cardápio.Clique no
Reindex
botão ao lado daLocal Repository
caixa de texto. Clique em "Aplicar" e depois em "OK" e pronto.fonte
Como algumas respostas apontaram, às vezes você realmente deseja excluir completamente o repositório local, por exemplo, pode haver alguns artefatos que não podem ser eliminados, pois não são mais referenciados pelo pom.
Se você deseja incorporar essa exclusão em uma fase de preparação, por exemplo,
clean
você pode usarmaven-clean-plugin
e acessar o repositório através das configurações, por exemplo:fonte
Use
mvn dependency:purge-local-repository -DactTransitively=false -Dskip=true
se você tiver plug-ins maven como um dos módulos. Caso contrário, o Maven tentará recompilá-los, baixando as dependências novamente.fonte
Eu tive esse mesmo problema e escrevi um shell de uma linha para fazer isso.
Eu fiz isso como uma única linha, porque queria ter um projeto Jenkins para simplesmente executar isso sempre que necessário, para não precisar fazer logon nas coisas etc. Se você se permitir um script de shell para ele, você pode escrever mais limpo:
Deve funcionar, mas não testei todo esse script. (Testei o primeiro comando, mas não o script inteiro.) Essa abordagem tem a desvantagem de executar um comando grande e complicado primeiro. É idempotente, para que você possa testá-lo por si mesmo. A exclusão é seu próprio comando posteriormente, e isso permite que você tente tudo e verifique se faz o que pensa, porque não deve confiar nos comandos de exclusão sem verificação. No entanto, é inteligente por um bom motivo: é portátil. Ele respeita seu arquivo settings.xml. Se você estiver executando este comando e instruir o maven a usar um arquivo xml específico (o argumento -s ou --settings), isso ainda funcionará. Então você não precisa se preocupar em garantir que tudo seja o mesmo em todos os lugares.
É um pouco pesado, mas é uma maneira decente de fazer negócios, IMO.
fonte
Portanto, existem alguns comandos que você pode usar para limpar
também excluir a pasta do repositório de .m2 pode ajudar.
fonte