Tidak dapat menemukan atau memuat kelas utama org.gradle.wrapper.GradleWrapperMain

166

Aku membersihkan seluruh proyek dengan menghapus direktori lokal seperti ~/.gradle, ~/.m2 ~./androiddan ~/workspace/project/.gradledan memilih ponsel File -> Invalidate Caches / Restart...Android Studio. Sekarang pelaksanaan perintah ./gradlewmengarah ke output berikut:

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

Tak perlu dikatakan, saya menghapus terlalu banyak, pertanyaannya adalah bagaimana itu bisa diperbaiki lagi? Apakah Anda punya ide bagaimana cara memperbaikinya?

SePröbläm
sumber
4
Anda harus dapat menjalankan gradle wrapperlagi untuk membuat ulang kode yang hilang ... ini dengan asumsi Anda tidak memiliki pengaturan kontrol sumber.
cjstehno
Apakah Anda sudah menginstal gradle di mesin Anda? Anda dapat mencoba menggunakan gradle reguler alih-alih gradlew, mungkin harus mengembalikan wrapper gradle juga.
RaGe

Jawaban:

134

Pembungkus gradle Anda hilang, rusak, atau rusak.

Apa itu pembungkus gradle:
gradlew apakah skrip batch dapat dieksekusi - batch pada jendela dan skrip shell di tempat lain. Script wrapper ketika dipanggil, mengunduh versi gradle yang ditentukan dan menjalankannya. Dengan mendistribusikan pembungkus dengan proyek Anda, siapa pun dapat bekerja dengannya tanpa perlu menginstal Gradle sebelumnya. Bahkan yang lebih baik lagi, pengguna build dijamin menggunakan versi Gradle yang dirancang untuk bekerja dengannya.

Memulihkan pembungkus gradle:
Dulu Anda perlu menambahkan wrappertugas ke build.gradle Anda untuk memulihkan pembungkus gradle dan semua dependensinya. Misalnya:

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

Versi gradle yang lebih baru tidak memerlukan ini. Sekarang tugas bawaan. Lari saja:

gradle wrapper

Anda juga dapat menyediakan flag tambahan untuk menentukan versi dll

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

Saat Anda menjalankan tugas ini, skrip pembungkus gradle, dan file jar yang diperlukan ditambahkan ke folder sumber Anda. Properti disimpan dalam gradle / wrapper / gradle-wrapper.properties

(Anda mungkin perlu menginstal gradle secara lokal untuk menjalankan ini. brew install gradlePada mac misalnya. Lihat instruksi lebih rinci di sini )

Mengapa itu hilang sejak awal?
OP tampaknya telah menghapus sesuatu yang tergantung pada grader wrapper.

Tetapi alasan umum adalah bahwa entri .gitignore mencegah toples pembungkus diperiksa ke git. Perhatikan bahwa .gitignore yang berlaku mungkin ada di folder sumber, atau yang global di folder home pengguna Anda atau git konfigurasi global. Adalah umum untuk memiliki *.jarentri di .gitignore.

Anda bisa menambahkan pengecualian untuk file jar gradlew di .gitignore

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

atau memaksa menambahkan toples ke dalam git

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

ref: Gradle Wrapper

Kemarahan
sumber
1
Terima kasih banyak!
SePröbläm
8
Penyebab lain yang mungkin untuk kesalahan ini adalah agar file gradle / wrapper / gradle-wrapper.jar tidak dapat dieksekusi, misalnya jika Anda menyalin file dari Windows ...
centic
Saya memiliki kasus ini dan akhirnya menjalankan gradlew.bat tanpa argumen memperbaikinya. Tidak tahu kenapa, tapi patut dicoba.
Alwyn Schoeman
207

Selain jawaban @ RaGe mungkin situasi yang saya hadapi di mana saya memiliki global git diabaikan yang mengabaikan .jarfile dan sehingga toples pembungkus gradle tidak pernah dilakukan. Jadi saya mendapatkan kesalahan itu di server Jenkins setelah mencoba /var/lib/jenkins/my_project/gradlew build. Saya harus secara eksplisit memaksa menambahkan toples dan kemudian melakukan:

git add -f gradle/wrapper/gradle-wrapper.jar
HankCa
sumber
17
Ini memang masalahnya. Saya tidak menyadari bahwa saya memiliki global .gitignore.
amey91
1
Bagus Ini juga yang terjadi pada saya.
Brendan
Ini persis masalah saya ... Terima kasih sobat!
theyCallMeJun
Saya sedang mengerjakan CI / CD dalam Tindakan GitHub dan ini untuk saya. Terima kasih!
Andi
43

Yang berhasil bagi saya adalah menjalankan pertama kali:

 gradle wrapper

Setelah berhasil membangun saya bisa berlari

./gradlew assembleRelease

Catatan: Agar dapat menjalankan jalankan gradle wrapperpertama brew install gradle. Jika instalasi berhasil dijalankan gradle wrapperdari root proyek.

Sumber dan terima kasih: http://gradle.org/docs/current/userguide/gradle_wrapper.html dan https://stackoverflow.com/users/745574/rage

niklasingvar
sumber
1
Jika perintah ini tidak berfungsi, pada AS ada panel Gradle di sisi kanan. KlikGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Jemshit Iskenderov
Bekerja untukku.
negrotico19
Ya, saya memiliki masalah yang sama pada proyek springBoot di IntelliJ IDE, saran ini menyelesaikan masalah. Terima kasih @niklasingvar
Ermias K
41

Dalam kasus saya ini adalah global .gitignore, seperti dijelaskan dalam jawaban @ HankCa .

Alih-alih dengan paksa menambahkan toples, yang perlu Anda ingat untuk lakukan di setiap proyek Gradle, saya menambahkan override untuk memasukkan kembali toples jar di global saya .gitignore:

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

Ini berguna bagi saya karena saya memiliki banyak proyek yang menggunakan Gradle; Git sekarang akan mengingatkan saya untuk memasukkan toples jar.

Override ini akan berfungsi selama tidak ada direktori di atas gradle-wrapper.jar(seperti gradledan wrapper) yang diabaikan - git tidak akan turun ke direktori yang diabaikan karena alasan kinerja .

Alex Palmer
sumber
Ya ini masalah yang sama dalam kasus saya
silentsudo
22

Dalam kasus saya, saya meninggalkan wrappersub folder saat menyalin gradlefolder dan mendapatkan kesalahan yang sama.

Tidak dapat menemukan atau memuat kelas utama org.gradle.wrapper.GradleWrapperMain

pastikan Anda memiliki struktur folder yang benar jika Anda menyalin pembungkus dari lokasi lain.

├── build.gradle
├── gradle
│ └── pembungkus
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── Gradlew
├── gradlew.bat
└── settings.gradle
yantaq
sumber
Mengapa Anda menyalin pembungkus? Cukup mengeksekusi gradle wrapperakan memberi Anda hasil yang sama persis;)
Xerus
@Xerus, di beberapa perusahaan, ada batasan jaringan yang tidak dapat Anda unduh secara gratis. dalam hal ini Anda harus menyalin / memindahkan.
yantaq
8

Anda mungkin kehilangan gradle-wrapper.jarfile di bawah direktori gradle/wrapperdi proyek Anda.

Anda perlu membuat file ini melalui skrip ini di file build.gradle seperti di bawah ini,

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

dan jalankan tugas:

gradle wrapper

Dengan gradle 2.4 (atau lebih tinggi) Anda dapat mengatur pembungkus tanpa menambahkan tugas khusus:

gradle wrapper --gradle-version 2.3

ATAU

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

Semua detail dapat ditemukan tautan ini

Luna Kong
sumber
Banyak kesalahan di windows 10 untuk "gradle wrapper --gradle-distribution-url myEnterpriseRepository: 7070 / gradle / distro / ... "
Cinta dan kedamaian - Joe Codeswell
Ya, masalahnya tidak ada konten gradle/wrapperdir. Ini dapat diatasi dengan menjalankan gralde wrapperseperti yang Anda sebutkan.
Yuri
Jika perintah ini tidak berfungsi, pada AS ada panel Gradle di sisi kanan. KlikGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Jemshit Iskenderov
4

Anda juga dapat menyalin gradlew.bat ke folder root Anda dan menyalin gradlew-wrapper ke folder gradlew.

itu bekerja untuk saya.

Orang
sumber
4

Saya mengikuti jawaban dari atas ketika saya mengalami ini. Dan Jika Anda mengalami masalah ini daripada pastikan untuk memaksa mendorong kedua jar dan properti file. Setelah dua ini, saya berhenti mendapatkan masalah ini.

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

Dalam kasus saya (menggunakan windows 10) gradlew.bat memiliki baris kode berikut:

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

Variabel APP_HOME pada dasarnya adalah folder root gradles untuk proyek, jadi, jika ini kacau, Anda akan mendapatkan beberapa cara:

Kesalahan: Tidak dapat menemukan atau memuat kelas utama org.gradle.wrapper.GradleWrapperMain

Bagi saya, ini sudah kacau karena struktur folder proyek saya memiliki ampersand (&) di dalamnya. Misalnya C: \ Test & Dev \ MyProject

Jadi, gradel mencoba menemukan file gradle-wrapper.jar di folder root C: \ Test (menghapus semuanya setelah dan termasuk '&')

Saya menemukan ini dengan menambahkan baris berikut di bawah set APP_HOME =% DIRNAME% baris di atas. Kemudian jalankan file bat untuk melihat hasilnya.

echo "%APP_HOME%"

Akan ada beberapa 'karakter khusus' lain yang dapat memecah jalur / direktori.

Neil Watson
sumber
2

Saya melihat kesalahan yang sama tetapi dalam kasus saya itu adalah instalasi Git baru tanpa LFS diinstal. Repo yang dimaksud diatur dengan LFS dan gradle-wrapper.jar berada di LFS sehingga hanya berisi pointer ke server LFS. Solusinya sederhana, jalankan:

git lfs install

Dan klon baru melakukan trik. Saya kira git lfs pullatau hanya git pullbisa membantu tetapi orang dengan masalah memutuskan untuk melakukan klon baru sebagai gantinya.

cb2
sumber
1

@HankCa memecahkan masalah dalam kasus saya juga. Saya memutuskan untuk mengubah pengabaian saya yang berbahaya **/*.jarmenjadi yang cukup jelas src/**/lib/*.jaruntuk menghindari masalah seperti itu di masa depan. Mengabaikan dimulai dengan ** / * agak terlalu berbahaya, setidaknya bagi saya. Dan selalu merupakan ide yang bagus untuk mendapatkan ide di balik deretan .gitignore hanya dengan melihatnya.


sumber
1

Dalam kasus saya gradle-wrapper.jar rusak setelah mengganti banyak file. Mengembalikan yang asli menyelesaikan masalah.

NeeK
sumber
1
Hey @ Neek Selamat datang di Stack overflow tolong beri jawaban pada pertanyaan baru pertanyaan ini sudah lebih dari 4 jawaban diterima jadi harap berkonsentrasi pada bagian itu.
Dilip
2
Tentu! semua jawaban yang diterima di atas tidak membantu saya, jadi saya berikan apa yang membantu saya.
NeeK
1

Saya memperbaiki masalah ini dengan perbaikan selanjutnya (mungkin itu akan membantu seseorang):

Periksa apakah folder induk folder proyek Anda memiliki nama dengan spasi atau karakter terlarang lainnya. Jika ya - hapus saja.

"C: \ Users \ someuser \ Test Projects \ testProj" - dalam hal ini "Test Projects" harus "TestProjects".

Ihor Khomiak
sumber
1

Pada Gradle 5.x saya menggunakan:

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

Dalam kasus saya, saya telah menghapus folder gradlew dan gradle dari proyek. Reran bersih membangun tugas melalui "Run Gradle Task" dari jendela Gradle Projects di intellij

masukkan deskripsi gambar di sini

Saurabh
sumber
0

jika ini proyek baru, hapus folder yang ada dan jalankan $ npm install -g react-native-cli

periksa apakah berjalan tanpa kesalahan

anggur
sumber