Como posso dizer à gradle para baixar novamente dependências de repositórios?
Como posso dizer à gradle para baixar novamente dependências de repositórios?
Respostas:
Geralmente, você pode atualizar dependências no cache com a opção de linha de comando --refresh-dependencies . Você também pode excluir os arquivos em cache em ~/.gradle/caches
. Com a próxima compilação, o Gradle tentaria baixá-los novamente.
Qual é o seu caso de uso específico? Você usa versões de dependência dinâmica ou versões do INSTANTÂNEO?
Nos sistemas Unix, é possível excluir todos os artefatos existentes (artefatos e metadados) que o Gradle baixou usando:
rm -rf $HOME/.gradle/caches/
find $HOME/.gradle/caches/ -name "*LIBRARY_NAME*" -exec rm -r {} \;
Se você estiver usando uma versão recente do Gradle, poderá usar a opção --refresh-dependencies.
./gradlew build --refresh-dependencies
você pode consultar o manual Gradle .
A opção --refresh-dependencies diz ao Gradle para ignorar todas as entradas em cache dos módulos e artefatos resolvidos. Uma nova resolução será executada em todos os repositórios configurados, com as versões dinâmicas recalculadas, os módulos atualizados e os artefatos baixados.
Você pode solicitar que Gradle faça o download novamente de algumas dependências no script de construção sinalizando a dependência como 'alterando'. Gradle procurará atualizações a cada 24 horas, mas isso pode ser configurado usando o DSL resolutionStrategy. Acho útil usá-lo para compilações SNAPSHOT ou NIGHTLY.
configurations.all {
// Check for updates every build
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
Expandido:
dependencies {
implementation group: "group", name: "projectA", version: "1.1-SNAPSHOT", changing: true
}
Condensado:
implementation('group:projectA:1.1-SNAPSHOT') { changing = true }
Encontrei esta solução neste tópico do fórum .
cacheChangingModulesFor
é a chave, changing: true
é opcional porque está implícita -SNAPSHOT
, é possível usar a abreviação aqui: compile 'group:projectA:1.1-SNAPSHOT'
por causa da implicação acima. Um pode também restringir a resolutionStrategy a uma config: configurations.compile.resolutionS...
.
compile 'com.burrowsapps:ads:1.0:true'
?
Para MAC
./gradlew build --refresh-dependencies
Para Windows
gradlew build --refresh-dependencies
Também pode tentar gradlew assembleDevelopmentDebug --refresh-dependencies
gradle wrapper
tarefa usando ; você pode até gerar um invólucro usando outro invólucro Gradle:gradlew wrapper
Para Windows ... para fazer o gradle baixar novamente dependências específicas :
exclua as dependências que deseja baixar novamente do diretório abaixo:
C:\Users\%USERNAME%\.gradle\caches\modules-2\files-2.1
exclua todos os diretórios de metadados no caminho:
C:\Users\%USERNAME%\.gradle\caches\modules-2\metadata-*
execute gradle build
(ou gradlew build
se estiver usando o gradle wrapper) no diretório raiz do projeto.
nota: os números nos caminhos dos arquivos acima podem ser diferentes para você.
Pode-se remover a pasta com os frascos em cache.
No meu caso, no Mac, a biblioteca foi armazenada em cache no caminho:
/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove
Eu removi a pasta da biblioteca em cache ("biblioteca em cache para remover" no exemplo acima), excluí a pasta de compilação do meu projeto e compilei novamente. Nova biblioteca foi baixada então.
Em vez de remover todo o cache de gradle, como sugerem algumas respostas aqui, você pode excluir o cache de um grupo ou ID de artefato específico. Eu adicionei a seguinte função ao meu .bash_profile
:
deleteGradleCache() {
local id=$1
if [ -z "$id" ]; then
echo "Please provide an group or artifact id to delete"
return 1
fi
find ~/.gradle/caches/ -type d -name "$id" -prune -exec rm -rf "{}" \; -print
}
Uso:
$ deleteGradleCache com.android.support
Em seguida, na próxima compilação ou se você ressincronizar, o gradle baixará novamente as dependências.
Existem 2 maneiras de fazer isso:
Usando a opção --refresh-dependencies :
./gradlew build --refresh-dependencies
Explicação resumida - a opção de atualização de dependências diz ao Gradle para ignorar todas as entradas em cache dos módulos e artefatos resolvidos.
Explicação longa
Usando delete: ao excluir caches
rm -rf $HOME/.gradle/caches/
Você acabou de limpar todos os jarros em cache e as somas sha1 e o Gradle está em uma situação em que não há artefatos em sua máquina e precisa fazer o download de tudo. Sim, ele funcionará 100% pela primeira vez, mas quando outro SNAPSHOT for lançado e fizer parte da sua árvore de dependência, você será novamente confrontado com a opção de atualizar ou limpar os caches.
Isso funcionou para mim. Verifique se o Gradle não está definido como offline desmarcando o botão em Arquivo> Configurações> Gradle> Trabalho offline.
Adicione isso ao nível superior do seu build.gradle, é bom ter dependências acima
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
Assegurei que minhas dependências fossem escritas assim:
implementation('com.github.juanmendez:ThatDependency:ThatBranch-SNAPSHOT') {
changing = true
}
Depois disso, abro o painel Gradle no Android Studio e clico no botão de setas do círculo azul. Sempre consigo ver minhas atualizações recebendo uma nova cópia nova.
Para Android Studio 3.4.1
Simplesmente abra a guia gradle (pode estar localizada à direita) e clique com o botão direito do mouse no pai na lista (deve ser chamado de "Android") e selecione "Atualizar dependências".
Isso deve resolver seu problema.
Mb Estou atrasado, no entanto, minha solução é para repositório único. Eu acho que excluir ~ / .gradle / * é um exagero. O problema com o qual me deparei foi que eu estava excluindo o diretório onde estavam as fontes e o gradle estava recebendo outra versão, não do nexus. Para evitar que eu corra o próximo:
~/.gradle$ find . -type d -name 'group.plugins.awssdk'
./caches/modules-2/files-2.1/group.plugins.awssdk
./caches/modules-2/metadata-2.23/descriptors/group.plugins.awssdk
~/.gradle$ rm -r ./caches/modules-2/files-2.1/group.plugins.awssdk ./caches/modules-2/metadata-2.23/descriptors/group.plugins.awssdk
Depois disso, o gradle está arrastando arquivos do nexus.
Para atualizar a versão em cache 'release', a única opção é limpar o cache local.
rm -rf $HOME/.gradle/caches/
Para atualizar a versão em cache do 'instantâneo', você pode:
./gradlew build --refresh-dependencies
A exclusão de todos os caches faz o download de todas as dependências novamente. por isso demora tanto tempo e é chato esperar novamente para baixar novamente todas as dependências.
Como sempre eu poderia ser capaz de resolver isso abaixo caminho.
Apenas exclua os grupos que precisam ser atualizados.
Ex: se queremos atualizar o grupo com.user.test
rm -fr ~/.gradle/caches/modules-2/files-2.1/com.user.test/
remova a dependência do build.gradle e adicione-a novamente. então ele atualizará as dependências do que queremos.
Acho gradle 2.14.1 corrige o problema. A resposta aceita está correta, mas há um erro no gradle com –refresh-dependencies. 2.14.1 corrige isso.
Consulte https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556
exclua este diretório:
C:\Users\[username]\.gradle
Para a maioria dos casos, simplesmente reconstruir o projeto deve funcionar. Às vezes, você precisa executar ./gradlew build --refresh-dependencies
como várias respostas já mencionadas (leva muito tempo, dependendo de quantas dependências você possui). No entanto, às vezes, nada disso funcionará: a dependência não será atualizada. Então, você pode fazer isso:
NonExistingClass
razão)Isso é ridículo e parece loucura, mas na verdade eu uso esse procedimento diariamente, simplesmente porque a dependência de que preciso pode ser atualizada dezenas de vezes e nenhuma solução adequada teria efeito.
Você pode fazer assim
https://marschall.github.io/2017/04/17/disabling-gradle-cache.html
Para citar Desabilitando o Gradle Build Cache
O cache de construção do Gradle pode ser ótimo quando você está construindo projetos grandes regularmente com o Gradle. No entanto, quando apenas ocasionalmente constrói projetos de código aberto, ele pode rapidamente se tornar grande.
Para desativar o cache de compilação Gradle, adicione a seguinte linha em
~/.gradle/gradle.properties
org.gradle.caching=false
Você pode limpar o cache existente com
rm -rf $HOME/.gradle/caches/ rm -rf $HOME/.gradle/wrapper/
Se você estiver usando o eclipse e se desejar forçar o eclipse a recarregar dependências, tente o comando abaixo
gradlew clean cleaneclipse build eclipse --refresh-dependencies
Somente uma exclusão manual da dependência específica na pasta cache funciona ... um artefato criado por um colega no repositório corporativo.
No meu caso, nenhuma das opções acima funcionou, o que fiz foi:
build.gradle
, comentando as dependências relacionadas às importações não resolvidas que eu tinhaEntão minhas importações foram resolvidas corretamente novamente.
Você precisa fazer o download novamente para poder baixar e substituir manualmente o arquivo corrompido e sincronizar novamente o seu projeto. Vá para este local C: \ users [nome de usuário] .gradle \ wrapper \ dist \ gradle3.3-all \ 55gk2rcmfc6p2dg9u9ohc3hw9 \ gradle-3.3-all.zip Exclua o gradle3.3allzip e substitua-o baixando novamente neste site https: / /services.gradle.org/distributions/ Encontre o mesmo arquivo, faça o download e cole-o nesse local. Em seguida, sincronize seu projeto. Espero que funcione para você também.