Como forçar a atualização do maven?

731

Importei meu projeto que já estava funcionando em outro computador e ele começou a baixar dependências.

Aparentemente, minha conexão à Internet travou e agora recebo o seguinte:

    >Build errors for comics; org.apache.maven.lifecycle.LifecycleExecutionException:
    Failed to execute goal on project comicsTest: Could not resolve dependencies for project comicsTest:comicsTest:war:0.0.1-SNAPSHOT:
    The following artifacts could not be resolved:
    org.springframework:spring-context:jar:3.0.5.RELEASE,
    org.hibernate:hibernate-entitymanager:jar:3.6.0.Final,
    org.hibernate:hibernate-core:jar:3.6.0.Final,
    org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final,
    org.aspectj:aspectjweaver:jar:1.6.8,
    commons-lang:commons-lang:jar:2.5,

    >mysql:mysql-connector-java:jar:5.1.13: Failure to transfer org.springframework:spring-context:jar:3.0.5.RELEASE from http://repo1.maven.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced.

    >Original error: Could not transfer artifact org.springframework:spring-context:jar:3.0.5.RELEASE from central (http://repo1.maven.org/maven2): No response received after 60000

Como forço o maven a atualizar?

M4ks
fonte
Nota lateral: Eu tive esse problema com o Atlassian Maven (do plugin SDK) e a atualização para a versão mais recente resolveu o problema.
Wirone

Respostas:

1597
mvn clean install -U

-Usignifica forçar atualização de dependências de instantâneo . Dependências de versão não podem ser atualizadas dessa maneira.

lwpro2
fonte
32
Eu concordo com o lwpro2, isso também resolveu o meu problema. Apenas fazer o mvn clean não é suficiente. A resposta da Navi não é suficiente para resolver o problema.
R. van Twisk
1
Eu acredito que isso é mais complicado se você estivesse usando artefatos e usasse o ID do repositório "central", porque os metadados aparentemente não são limpos.
Gb667
2
Isso não parece realmente atualizar os jars de dependência de instantâneo, apenas os metadados.
Roddy das ervilhas congeladas
se ele é causado pelo arquivo .lastupdated, gerado a partir do último download dependência sem sucesso, este método não vai funcionar, precisamos de algo como a resposta de Rober Reiz
Junchen Liu
1
Estou procurando a ajuda para versões anteriores e até o maven 2.0.4, a descrição do sinalizador -U era: "-U, - update-snapshots Atualize todos os instantâneos, independentemente das políticas de repositório", começando com 2.0.5, tornou-se: "-U, - update-snapshots Força uma verificação de versões e instantâneos atualizados em repositórios remotos" E tem sido assim desde então. Ambas as versões foram lançadas em 2007. Gostaria de saber se a resposta também deve ser editada para dar conta dos lançamentos?
Cleberz 03/11/19
93

Se o seu repositório local estiver de alguma forma cheio de jarros de liberação, em vez de snapshots ( -Ue --update-snapshotsapenas atualizar snapshots), você poderá limpar o repositório local usando o seguinte:

 mvn dependency:purge-local-repository

Você provavelmente deseja limpar e instalar novamente:

 mvn dependency:purge-local-repository clean install

Muito mais informações disponíveis em https://maven.apache.org/plugins/maven-dependency-plugin/examples/purging-local-repository.html

FuzzyJulz
fonte
8
Assim como eu fiz mvn dependency:purge-local-repository, ele simplesmente re-baixado todas as dependências novamente, o que é exatamente o que eu queria
smac89
92

-U parece forçar a atualização de todas as dependências.

Se você deseja atualizar uma única dependência sem limpeza ou -Upode simplesmente removê-la do seu repositório local e depois compilar.

O exemplo abaixo se para atualização slf4j-api 1.7.1-SNAPSHOT:

rm -rf ~/.m2/repository/org/slf4j/slf4j-api/1.7.1-SNAPSHOT
mvn compile
Ayush Gupta
fonte
Isso funciona bem se você estiver usando outra ferramenta que não seja o maven que faça referência ao seu repositório local do maven.
Mansoor Siddiqui
57

Todas as respostas aqui não funcionaram para mim. Eu usei o método do martelo:

find ~/.m2/ -name "*.lastUpdated" | xargs rm

Isso resolveu o problema :-)

Robert Reiz
fonte
1
@ DJ2 Isso exclui todos os arquivos no diretório .m2chamado*.lastUpdated
sjngm
find ~/.m2/ -name "*.lastUpdated" -deletefaria sem o perigo de xargsou rmexceder alguns limites (se muitos arquivos forem encontrados).
A Sz
45

Você pode fazer efetivamente a partir de Eclipse IDE. Claro, se você estiver usando.

Project_Name->Maven->Update Project Configuration->Force Update of Snapshots/Releases
Amit Shakya
fonte
1
Eu fiz a versão da linha de comando na resposta por @ lwpro2, que me permitiu criar na linha de comando , mas ainda não consegui construir no Eclipse. Isso fez com que ele fosse construído através do Eclipse.
Tijolo
Funciona para mim somente se eu fechar e reabrir o Eclipse após executar a atualização.
ceklock
33

Caso alguém queira apenas atualizar as dependências de captura instantânea do projeto e não queira instalar o artefato:

mvn dependency:resolve -U

Não se esqueça de reimportar dependências no seu IDE. No IDEA, você precisa clicar com o botão direito do mouse no arquivo pom e escolher Maven -> Reimportar

GlaIZier
fonte
13

Se você não tiver certeza do que está dentro do seu repositório local, recomendo iniciar uma compilação com a opção:

-Dmaven.repo.local=localrepo

Dessa forma, você garantirá a construção em um ambiente de sala limpa.

merejy
fonte
5
esse comando significa usar a pasta localrepo para ser o repositório local. isso é bom para um espaço de trabalho de projeto único, mas ruim se você tiver mais de um projeto e poucos dependem do outro. então o seu melhor de dar um caminho completo como -Dmaven.repo.local = / dados / my / localrepoDir
tgkprog
9

No meu caso, primeiro eu fiz foi:

mvn clean install -U

Ainda estava mostrando o mesmo erro, então fechei o projeto e o reabri novamente. Finalmente funcionou.

rajeev
fonte
Eu acho que você poderia apenas fazer dependências reimportar para evitar reabrir o projeto
GlaIZier
4

Se você estiver usando o eclipse IDE, então:

  • Selecione Projeto.
  • Pressione alt + F5, a janela para o Update Maven Project será exibida.

  • Marque - Forçar atualização de capturas instantâneas / liberações e clique em OK.

Se estiver usando o IDE Intellij

  • vá para configurações / Maven
  • verifique sempre atualizar instantâneos
patidarsnju
fonte
3

Usei o IntelliJ IDE e tive um problema semelhante. Para solucionar, cliquei em "Gerar fontes e atualizar pastas para todos os projetos" na guia Maven.

insira a descrição da imagem aqui

Willyan
fonte
2

Eu tenho o erro em outro contexto. Portanto, minha solução pode ser útil para outras pessoas que se deparam com a pergunta:

O problema: copiei o repositório local para outro computador, que não tem conexão com um repositório especial. Então, o maven tentou verificar os artefatos no repositório inválido.

Minha solução: Remova os arquivos _maven.repositories.

Matthias M
fonte
2

Essa é uma das coisas mais irritantes sobre o Maven. Para mim, acontece o seguinte: Se eu adicionar uma dependência solicitando mais dependências e mais e mais, mas tiver uma conexão lenta, ela será interrompida durante o download e o tempo limite. Embora o tempo limite seja esgotado, todas as dependências ainda não buscadas são marcadas com marcadores de posição no cache .m2 e o Maven não irá (nunca) buscá-lo, a menos que eu remova a entrada do marcador de posição do cache (como indicado anteriormente) removendo-o.

Até onde eu vejo, o Maven ou, mais precisamente, o plug-in do Eclipse Maven tem um bug sobre isso. Alguém deve relatar isso.

Martin Kersten
fonte
2

Você precisa verificar o arquivo settings.xml no <maven_home>/confdiretório

Ashish Nariyal
fonte
1

Eu tenho o mesmo erro com a dependência android-maps-utils. Usar o pacote do tipo aar na seção de dependência resolve meu problema. Por padrão, o tipo é jar, portanto, pode ser verificado que tipo de dependência no repositório é baixado.

zhen_khokh
fonte
1

Para corrigir esse problema no Eclipse:

1) Adicione a dependência abaixo no Maven pom.xml e salve o arquivo pom.xml.

<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.3.1</version>
</dependency>

2) Vá para o projeto >> Maven >> Atualizar Projeto

selecione o projeto e clique em OK.

3) Etapa opcional, se não for resolvida até a etapa 2, faça a etapa abaixo depois de executar a etapa 1

Vá para o projeto >> Maven >> Atualizar projeto >> marque a caixa de seleção 'Forçar atualização de snapshots / liberações'

selecione o projeto e clique em OK.

Tarun11
fonte
1

As versões anteriores do maven não forçaram a verificação de versões ausentes quando usadas -U com a instalação limpa do mvn, apenas os instantâneos, embora a versão mais recente suporte isso.

Para alguém ainda lutando com a versão anterior, o seguinte pode ser útil:

No Windows:

cd %userprofile%\.m2\repository
for /r %i in (*.lastUpdated) do del %i

No Linux:

find ~/.m2  -name "*.lastUpdated" -exec grep -q "Could not transfer" {} \; -print -exec rm {} \;

Sempre que o maven não puder baixar dependências por qualquer motivo (conectividade / não existe, etc.), ele adicionará o ".error = Não foi possível transferir o artefato" no arquivo dependency-name.lastUpdate na respectiva pasta, no diretório $ home / .m2. A remoção desses arquivos forçará o maven a tentar buscar as dependências novamente.

ankidaemon
fonte
0

É importante acrescentar que a principal diferença de execução mvn com -U e sem -U é que -Usubstituirá os frascos do SNAPSHOT local pelos frascos do SNAPSHOT remotos.

Frascos INSTANTÂNEOS Locais criados a partir do local mvn installnos casos em que você tem outros módulos do seu proj que geram frascos.

Johnny
fonte
0

-U é usado para forçar a atualização do Repo. Usar

mvn -U clean install
Sanjeev Guglani
fonte
Esta é exatamente a mesma resposta que a resposta aceita. Dado 6 anos antes ...
Kerwin Sneijders
@KerwinSneijders Eu adicionei a resposta 2 anos atrás na época, a resposta aceita não forneceu informações sobre o que -U faz aqui
Sanjeev Guglani
Tanto quanto posso dizer, a resposta aceita incluía essas informações a partir do dia em que foram publicadas. (14 de março de 12). E mesmo que não, essa informação é melhor postada em um comentário abaixo das respostas aceitas, pois não é uma resposta, mas sim informações adicionais
Kerwin Sneijders
0

Eu tentei todas as respostas aqui, mas nada parecia funcionar. Reiniciei meu computador primeiro e depois executei mvn clean install -U. Isso resolveu meu problema.

Gelo
fonte
0

O que o maven faz é baixar todas as dependências do seu projeto no repositório local (pasta .m2). Por causa da Internet causar problemas no seu repositório local, seu projeto está enfrentando problemas. Não tenho certeza se isso certamente o ajudará ou não, mas você pode tentar excluir todos os arquivos na pasta do repositório dentro da pasta .m2. Como não haveria nada no repositório local, o maven seria forçado a baixar as dependências novamente, forçando uma atualização. Geralmente, a pasta .m2 está localizada em c: users: [nome de usuário] :. m2

Ketan R
fonte
-1

Eu tive esse problema por um motivo diferente. Fui ao repositório maven https://mvnrepository.com procurando a versão mais recente do spring core, que na época era 5.0.0.M3 / O repositório me mostrou essa entrada para o meu pom.xml:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.0.0.M3</version>
</dependency>

Por mais ingênuo que eu sou, presumi que o comentário estava me dizendo que o jar está localizado no repositório padrão.

No entanto, após muitas batidas de cabeça, vi uma nota logo abaixo do xml dizendo "Nota: este artefato está localizado no repositório Alfresco Public ( https://artifacts.alfresco.com/nexus/content/repositories/public/ ) "

Portanto, o comentário no XML é completamente enganador. O frasco está localizado em outro arquivo, e foi por isso que Maven não conseguiu encontrá-lo!

user1208639
fonte
-3

Podemos forçar a atualização mais recente do repositório de release e snapshot com o comando abaixo:

mvn --update-snapshots clean install
sopheng Seng
fonte
12
Esta é exatamente a mesma resposta que a resposta aceita. -U é a forma abreviada de --update-snapshots.
Roddy das ervilhas congeladas
-3

Eu tive o mesmo erro e executar mvn install -Ue, em seguida, funcionar mvn installfuncionou para mim.

rich_markle
fonte
10
Por favor, não poste respostas "a coisa mencionada em todas as outras respostas também funcionou para mim" .
Kryger # 17/16
-4

Corri para isso recentemente e executando o seguinte corrigiu todos os problemas

mvn -fae install
Hugh Brien
fonte
5
-fae,--fail-at-end Only fail the build afterwards; allow all non-impacted builds to continueParece uma maneira estranha de fixar dependências não actualizadas externos ..
Donatello
-5

mvn clean install -Unão funciona No entanto mvn -U cleanseguido por mvn clean installfaz.

mroman
fonte