Não foi possível encontrar ou carregar a classe principal org.gradle.wrapper.GradleWrapperMain

166

Eu limpei todo o projecto, excluindo diretórios locais como ~/.gradle, ~/.m2 ~./androide ~/workspace/project/.gradlee escolhendo File -> Invalidate Caches / Restart...no Android Studio. Agora a execução do comando ./gradlewleva à seguinte saída:

usr$ ./gradlew tasks
Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain

Escusado será dizer que eu apaguei demais, a questão é como ele pode ser reparado novamente? Você tem alguma idéia de como corrigir isso?

SePröbläm
fonte
4
Você deve poder executar gradle wrappernovamente para gerar novamente o código ausente ... isso pressupõe que você não tenha nenhuma configuração de controle de origem.
precisa saber é o seguinte
Você tem gradle instalado em sua máquina? Você pode tentar invocar o gradle regular em vez do gradlew, provavelmente também deve restaurar o invólucro do gradle.
RAGE

Respostas:

134

Seu invólucro de graduação está ausente, quebrado ou corrompido.

O que é o gradle wrapper:
gradlew é o executável do gradle wrapper - script em lote no windows e shell script em outro local. O script do wrapper, quando chamado, baixa a versão definida do gradle e a executa. Ao distribuir o wrapper com seu projeto, qualquer pessoa pode trabalhar com ele sem a necessidade de instalar o Gradle previamente. Ainda melhor, é garantido que os usuários da compilação usem a versão do Gradle com a qual a compilação foi projetada para funcionar.

Restaurando o Gradle Wrapper:
Costumava ser necessário adicionar uma wrappertarefa ao seu build.gradle para restaurar o gradle wrapper e todas as suas dependências. Por exemplo:

task wrapper(type: Wrapper) {
    gradleVersion = '4.1'
}

As versões mais recentes do gradle não exigem isso. Agora é uma tarefa interna. Apenas corra:

gradle wrapper

Você também pode fornecer sinalizadores adicionais para especificar versões, etc.

gradle wrapper --gradle-version 6.2 --distribution-type all

Quando você executa esta tarefa, um script wrapper gradle e os arquivos jar necessários são adicionados às suas pastas de origem. As propriedades são armazenadas em gradle / wrapper / gradle-wrapper.properties

(Pode ser necessário instalar o gradle localmente para executar isso. brew install gradleNo mac, por exemplo. Veja instruções mais detalhadas aqui )

Por que estava faltando em primeiro lugar?
O OP parece ter excluído algo do qual o gradle wrapper depende.

Mas um motivo comum é que uma entrada .gitignore impede que os jars do wrapper sejam verificados no git. Observe que o .gitignore em vigor pode estar na pasta de origem ou global na pasta inicial do usuário ou na configuração global do git. É comum ter uma *.jarentrada no .gitignore.

Você pode adicionar uma exceção para os arquivos jar do gradlew em .gitignore

*.jar
!gradle/wrapper/gradle-wrapper.jar

ou forçar, adicione o frasco do wrapper no git

git add -f gradle/wrapper/gradle-wrapper.jar

ref: Wrapper Gradle

Raiva
fonte
1
Muito obrigado!
SePröbläm
8
Outra causa possível para este erro é ter o Gradle / invólucro do arquivo / Gradle-wrapper.jar não executável, por exemplo, se você copiou arquivos do Windows ...
centic
Eu tive esse caso e, eventualmente, executando o gradlew.bat sem argumentos o corrigiu. Não sei por que, mas vale a pena tentar.
Alwyn Schoeman
207

Além da resposta de @ RaGe, pode ser a situação que enfrentei em que eu ignorei um git global que estava ignorando .jararquivos e, portanto, o frasco do wrapper gradle nunca estava sendo comprometido. Portanto, eu estava recebendo esse erro no servidor Jenkins após uma tentativa /var/lib/jenkins/my_project/gradlew build. Eu tive que forçar explicitamente uma adição do jar e depois confirmar:

git add -f gradle/wrapper/gradle-wrapper.jar
HankCa
fonte
17
Este era realmente o problema. Não sabia que tinha um .gitignore global.
precisa saber é
1
Agradável. Este também foi o meu caso.
Brendan
Este foi exatamente o meu problema ... Obrigado, companheiro!
theyCallMeJun
Estou trabalhando no CI / CD no GitHub Actions e foi isso para mim. Obrigado!
Andi
43

O que funcionou para mim é primeiro executar:

 gradle wrapper

Após a construção bem-sucedida, eu fui capaz de executar

./gradlew assembleRelease

Nota: Para poder executar a gradle wrapperprimeira execução brew install gradle. Se a instalação for bem-sucedida, execute a gradle wrapperpartir da raiz do projeto.

Fonte e agradecimentos: http://gradle.org/docs/current/userguide/gradle_wrapper.html e https://stackoverflow.com/users/745574/rage

niklasingvar
fonte
1
Caso este comando não funcione, no AS existe o painel Gradle no lado direito. CliqueGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Jemshit Iskenderov 15/05/19
Trabalhando para mim.
Negrico19
Sim, eu tive o mesmo problema no projeto springBoot no IntelliJ IDE, essa sugestão resolveu o problema. Obrigado @niklasingvar
Ermias K
41

No meu caso, era global .gitignore, como explicado na resposta da @ HankCa .

Em vez de adicionar com força o jar, que você precisará lembrar de fazer em cada projeto Gradle, adicionei uma substituição para incluir novamente o jar wrapper no meu global .gitignore:

*.jar
!gradle/wrapper/gradle-wrapper.jar

Isso é útil para mim, pois tenho muitos projetos que usam Gradle; O Git agora me lembrará de incluir o frasco do invólucro.

Essa substituição funcionará desde que nenhum diretório acima gradle-wrapper.jar(como gradlee wrapper) seja ignorado - o git não descerá para diretórios ignorados por motivos de desempenho .

Alex Palmer
fonte
Sim, este é o problema mesmo no meu caso
silentsudo
22

No meu caso, deixei de fora a wrappersubpasta enquanto copiava a gradlepasta e recebi o mesmo erro.

Não foi possível encontrar ou carregar a classe principal org.gradle.wrapper.GradleWrapperMain

verifique se você possui a estrutura de pastas correta se copiar o wrapper de outro local.

Build── build.gradle
├── gradle
│ └── wrapper
Grad ├── gradle-wrapper.jar
Grad └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
Settings── settings.gradle
yantaq
fonte
Por que você copia o wrapper? Basta executar gradle wrapperpara obter exatamente o mesmo resultado;)
Xerus
@Xerus, em alguns ambientes corporativos, existem restrições de rede que você não pode baixar livremente pacotes. neste caso, você deve copiar / mover.
yantaq 12/09
8

Você provavelmente está perdendo o gradle-wrapper.jararquivo no diretório gradle/wrapperdo seu projeto.

Você precisa gerar esse arquivo por meio desse script no arquivo build.gradle como abaixo,

task wrapper(type: Wrapper) {
   gradleVersion = '2.0' // version required
}

e execute a tarefa:

gradle wrapper

Com o gradle 2.4 (ou superior), você pode configurar um wrapper sem adicionar uma tarefa dedicada:

gradle wrapper --gradle-version 2.3

OU

gradle wrapper --gradle-distribution-url https://myEnterpriseRepository:7070/gradle/distributions/gradle-2.3-bin.zip

Todos os detalhes podem ser encontrados neste link

Luna Kong
fonte
Muitos erros no Windows 10 para "gradle wrapper --gradle-distribution-url myEnterpriseRepository: 7070 / gradle / distributions /… "
Amor e paz - Joe Codeswell 13/18
Sim, o problema está ausente no conteúdo de gradle/wrapperdir. Isso pode ser remediado executando o gralde wrapperque você declarou.
Yuri
Caso este comando não funcione, no AS existe o painel Gradle no lado direito. CliqueGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Jemshit Iskenderov 15/05/19
4

você também pode copiar o gradlew.bat para a pasta raiz e copiar o gradlew-wrapper para a pasta gradlew.

isso é trabalho para mim.

Cara
fonte
4

Eu segui as respostas de cima quando me deparei com isso. E se você está tendo esse problema, certifique-se de forçar o envio dos arquivos jar e properties. Após esses dois, parei de receber esse problema.

git add -f gradle/wrapper/gradle-wrapper.jar
git add -f gradle/wrapper/gradle-wrapper.properties
Jose Peralez
fonte
3

No meu caso (usando o Windows 10), o gradlew.bat possui as seguintes linhas de código em:

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

A variável APP_HOME é essencialmente uma pasta raiz de gradles para o projeto, portanto, se isso for prejudicado de alguma forma, você receberá:

Erro: não foi possível encontrar ou carregar a classe principal org.gradle.wrapper.GradleWrapperMain

Para mim, isso foi uma bagunça porque a estrutura da pasta do meu projeto tinha um e comercial (&). Por exemplo, C: \ Test & Dev \ MyProject

Portanto, o gradel estava tentando encontrar o arquivo gradle-wrapper.jar em uma pasta raiz de C: \ Test (removendo tudo depois e incluindo o '&')

Encontrei isso adicionando a seguinte linha abaixo do conjunto APP_HOME =% DIRNAME% linha acima. Em seguida, execute o arquivo bat para ver o resultado.

echo "%APP_HOME%"

Existem alguns outros 'caracteres especiais' que podem quebrar um caminho / diretório.

Neil Watson
fonte
2

Eu vi o mesmo erro, mas no meu caso, era uma nova instalação do Git sem o LFS instalado. O repositório em questão foi configurado com o LFS e o gradle-wrapper.jar estava no LFS, portanto, ele continha apenas um ponteiro para o servidor LFS. A solução era simples, basta executar:

git lfs install

E um novo clone fez o truque. Suponho que git lfs pullapenas um git pullpoderia ter ajudado, mas a pessoa com o problema decidiu fazer um novo clone.

cb2
fonte
1

@HankCa também resolveu o problema no meu caso. Decidi mudar meus **/*.jarignorantes perigosos para auto-explicativos, src/**/lib/*.jarpara evitar esses problemas no futuro. Ignora começar com ** / * são um pouco perigosos, pelo menos para mim. E é sempre uma boa ideia colocá-la atrás de uma linha .gitignore apenas olhando para ela.


fonte
1

No meu caso, o gradle-wrapper.jar foi corrompido depois de substituir um monte de arquivos. A reversão para a original resolveu o problema.

NeeK
fonte
1
Hey @ Neek Bem-vindo ao estouro de pilha, responda a nova pergunta, essa pergunta já tem mais de 4 respostas aceitas; portanto, concentre-se nessa parte.
Dilip
2
Certo! todas as respostas aceitas acima não me ajudaram, então eu coloquei o que me ajudou.
NeeK
1

Corrigi este problema com a próxima correção (talvez isso ajude alguém):

Verifique se as pastas pai da pasta do projeto têm nomes com espaços ou outros caracteres proibidos. Se sim - remova-o.

"C: \ Users \ someuser \ Test Projects \ testProj" - neste caso, "Test Projects" deve ser "TestProjects".

Ihor Khomiak
fonte
1

No Gradle 5.x eu uso:

wrapper {
    gradleVersion = '5.5.1'
}
Guilherme Biff Zarelli
fonte
0

No meu caso, removi as pastas gradlew e gradle do projeto. Reran tarefas de construção limpa por meio de "Executar Tarefa Gradle" na janela Projetos Gradle, em intellij

insira a descrição da imagem aqui

Saurabh
fonte
0

se for um novo projeto, remova a pasta existente e execute $ npm install -g react-native-cli

verifique se é executado sem nenhum erro

vinha
fonte