Como remover o arquivo jar do repositório maven local que foi adicionado com install: install-file?

122
mvn install:install-file -Dfile=phonegap-1.1.0.jar -DgroupId?=phonegap -DartifactId?=phonegap -Dversion=1.1.0 -Dpackaging=jar

Eu uso o comando acima para instalar o jar local no repo local maven. Agora eu tenho a dependência do repo maven. Quero remover isso do repositório local. Como limpá-lo?

user1844840
fonte

Respostas:

107

Embora exista um comando maven que você possa executar para fazer isso, é mais fácil excluir os arquivos manualmente do repositório.

Assim no Windows Documents and Settings\your username\.m2ou $HOME/.m2no Linux

Lagz0ne
fonte
10
Eu excluiria apenas o .m2/repository directory. Um colega de trabalho excluiu o diretório .m2 antes e causa problemas, porque em nosso projeto precisamos modificar o settings.xmlarquivo.
Tiris
7
Observe que, ao excluir o .m2/repositorydiretório, você também excluirá todos os arquivos de plug-in do maven. Enquanto que usando o purge-local-repositorycomando você está excluindo apenas dependências.
collinhaines
3
A estrutura de diretórios abaixo .m2/repositoryé organizada pelo ID do grupo Maven, para que você possa excluir o subdiretório correspondente ao artefato que deseja remover.
Kevin Krumwiede
124

Embora a exclusão manual de arquivos funcione, existe uma maneira oficial de remover dependências do seu projeto do repositório local (cache) e, opcionalmente, resolvê-las novamente a partir de repositórios remotos.

O objetivo purge-local-repository, no plug-in de dependência padrão do Maven, removerá as dependências instaladas localmente deste projeto do seu cache. Opcionalmente, você pode resolvê-los novamente dos repositórios remotos ao mesmo tempo.

Isso deve ser usado como parte de uma fase do projeto porque se aplica às dependências do projeto que o contém. Também as dependências transitivas serão removidas (localmente) também, por padrão.

Se você deseja remover explicitamente um único artefato do cache, use purge-local-repositorycom o manualIncludeparâmetro Por exemplo, na linha de comando:

mvn dependency:purge-local-repository -DmanualInclude="groupId:artifactId, ..."

A documentação implica que isso não remove dependências transitivas por padrão. Se você estiver executando com um local de cache não padrão ou em várias plataformas, elas são mais confiáveis ​​do que excluir arquivos "manualmente".

A documentação completa está na especificação maven-dependency-plugin .

Nota : As versões mais antigas do dependencyplug-in maven tinham uma manual-purge-local-repositorymeta, que agora é (versão 2.8) implícita pelo uso de manualInclude. A documentação para manualIncludes(com um s) também deve ser lida.

Steve Powell
fonte
Não acredito que isso funcione para .jars que não foram baixados do maven central ou de algum outro repositório. Quando eu executar este comando ele se livrar de todos os .jars que automaticamente baixado, mas quando se chega aos .jars que eu instalados manualmente, ele gera esta mensagem de erro: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.8:purge-local-repository (default-cli) on project alloy-generator: Failed to refresh project dependencies for: myartifact: required artifacts missing: [ERROR] manually-downloaded-and-installed.jar ...
stiemannkj1
3
Na verdade, depois que o verifiquei, percebi que ele desinstala o arquivo .jar, mas ainda gera um erro. Assim, para .jars que foram instalados manualmente, eu recomendaria manualmente apagar ao invés de usar este método, porque Maven cria alguns arquivos estranhos como yourjar.jar.lastUpdatede yourjar.pom.lastUpdatedque pode ser necessário excluir manualmente qualquer maneira. Mas se o maven gerenciava todas as dependências automaticamente, essa é uma ótima maneira de desinstalar as dependências.
stiemannkj1
Essa abordagem também requer um projeto maven para executar o comando. Isso não parece funcionar se você executou o comando de instalação especificado pelo OP no contexto de, digamos, uma compilação Gradle.
jdonmoyer
19

Pelo menos na versão atual do maven, é necessário adicionar a opção -DreResolve = false se você deseja remover as dependências do seu repositório local sem precisar fazer o download novamente.

mvn dependency:purge-local-repository -DreResolve=false

remove as dependências sem baixá-las novamente.

rob2universe
fonte
você poderia, por favor, dar uma olhada: stackoverflow.com/questions/58937713/…
gstackoverflow
12

Exclua todas as coisas (jar, pom.xml, etc) no ~/.m2/repository/phonegap/1.1.0/diretório local se você estiver usando um sistema operacional Linux.

Abimaran Kugathasan
fonte
Quando removo o jar dessa maneira, ele "baixa novamente" o jar da pasta antiga. Pode haver algumas referências que precisam ser removidas também.
Antonio Sesto
0

Enfrentei o mesmo problema, passei por todas as sugestões acima, mas nada funcionou. Finalmente, apaguei as pastas .m2 e .ivy e funcionou para mim.

Nagesh Vashist
fonte
-5
  1. cd ~/.m2
  2. git init
  3. git commit -am "some comments"
  4. cd /path/to/your/project
  5. mvn install
  6. cd ~/.m2
  7. git reset --hard
Kent Yao
fonte
4
Essa resposta pode ou não resolver o problema, mas que tal adicionar alguma explicação à sua resposta? Isso pode ajudar o OP a entender o que você está tentando mostrar a ele.
Gerhard
2
Esta resposta não está relacionada ao problema: você mostra a configuração do repositório git na pasta .m2 e redefine como repositório git.
Lquitadamo 31/12/19