Không thể tìm hoặc tải lớp chính org.gradle.wrapper.GradleWrapperMain


166

Tôi làm sạch toàn bộ dự án bằng cách xóa thư mục địa phương như ~/.gradle, ~/.m2 ~./android~/workspace/project/.gradlevà chosing File -> Invalidate Caches / Restart...trong Android Studio. Bây giờ thực thi lệnh ./gradlewdẫn đến đầu ra sau:

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

Không cần phải nói, tôi đã xóa quá nhiều, câu hỏi là làm thế nào nó có thể được sửa chữa một lần nữa? Bạn có bất cứ ý tưởng làm thế nào để khắc phục điều này?


4
Bạn sẽ có thể chạy gradle wrapperlại để tạo lại mã bị thiếu ... điều này giả sử bạn không có thiết lập kiểm soát nguồn.
cjstehno

Bạn đã cài đặt lớp trên máy của bạn? Bạn có thể thử gọi lớp thường xuyên thay vì gradlew, có lẽ cũng nên khôi phục lớp bao bọc lớp.
RaGe

Câu trả lời:


133

Lớp bọc của bạn bị thiếu, bị hỏng hoặc bị hỏng.

Trình bao bọc lớp là gì:
gradlew là trình bao bọc lớp thực thi - tập lệnh bó trên windows và tập lệnh shell ở nơi khác. Tập lệnh bao bọc khi được gọi, tải xuống phiên bản lớp được xác định và thực thi nó. Bằng cách phân phối trình bao bọc với dự án của bạn, bất kỳ ai cũng có thể làm việc với nó mà không cần phải cài đặt Gradle trước. Thậm chí tốt hơn, người dùng bản dựng được đảm bảo sử dụng phiên bản Gradle mà bản dựng được thiết kế để hoạt động.

Khôi phục trình bao bọc lớp: Trước
đây, bạn cần thêm một wrappertác vụ vào build.gradle để khôi phục trình bao bọc lớp và tất cả các phụ thuộc của nó. Ví dụ:

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

Các phiên bản mới hơn của gradle không yêu cầu điều này. Bây giờ nó là một nhiệm vụ tích hợp. Chỉ cần chạy:

gradle wrapper

Bạn cũng có thể cung cấp thêm cờ để chỉ định phiên bản, v.v.

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

Khi bạn chạy tác vụ này, một tập lệnh bao bọc lớp và các tệp jar cần thiết được thêm vào các thư mục nguồn của bạn. Các thuộc tính được lưu trữ trong gradle / Wrapper / gradle-wrapper.properies

(Bạn có thể cần cài đặt gradle cục bộ để chạy cái này. brew install gradleVí dụ như trên mac. Xem thêm hướng dẫn chi tiết tại đây )

Tại sao nó bị mất ở nơi đầu tiên?
OP dường như đã xóa một cái gì đó mà lớp bao bọc phụ thuộc vào.

Nhưng một lý do phổ biến là một mục .gitignore ngăn các lọ bọc được kiểm tra vào git. Lưu ý rằng .gitignore có hiệu lực có thể nằm trong thư mục nguồn hoặc toàn cầu trong thư mục nhà người dùng của bạn hoặc cấu hình toàn cầu git. Nó là phổ biến để có một *.jarmục trong .gitignore.

Bạn có thể thêm một ngoại lệ cho các tệp jar của gradlew trong .gitignore

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

hoặc buộc thêm bình bọc vào git

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

ref: Lớp bọc


1
Cảm ơn rât nhiều!
SePröbläm

8
Một nguyên nhân có thể khác gây ra lỗi này là do tệp gradle / Wrapper / gradle-Wrapper.jar không thể thực thi được, ví dụ: nếu bạn đã sao chép các tệp từ Windows ...
centic

Tôi đã có trường hợp này và cuối cùng thực hiện gradlew.bat không có đối số đã sửa nó. Không biết tại sao, nhưng đáng thử.
Alwyn Schoeman

207

Ngoài câu trả lời của @ RaGe có thể là tình huống tôi gặp phải khi tôi bỏ qua git toàn cầu mà bỏ qua .jarcác tập tin và vì vậy, gói trình bao lớp không bao giờ được cam kết. Vì vậy, tôi đã nhận được lỗi đó trên máy chủ Jenkins sau một nỗ lực /var/lib/jenkins/my_project/gradlew build. Tôi đã buộc phải thêm một cách rõ ràng và sau đó cam kết:

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

17
Đây thực sự là vấn đề. Tôi đã không nhận ra rằng tôi đã có một .gitignore toàn cầu.
amey91

1
Đẹp một. Đây cũng là trường hợp với tôi.
Brendan

Đây chính xác là vấn đề của tôi ... Cảm ơn bạn!
theyCallMeJun

Đang làm việc trên CI / CD trong GitHub Action và đây là nó cho tôi. Cảm ơn bạn!
Andi

43

Điều làm việc cho tôi là lần đầu tiên chạy:

 gradle wrapper

Sau khi xây dựng thành công tôi đã có thể chạy

./gradlew assembleRelease

Lưu ý: Để có thể chạy gradle wrapperlần chạy đầu tiên brew install gradle. Nếu cài đặt thành công chạy gradle wrappertừ gốc dự án.

Nguồn và cảm ơn: http://gradle.org/docs/civerse/userguide/gradle_wrapper.htmlhttps://stackoverflow.com/users/745574/rage


1
Trong trường hợp lệnh này không hoạt động, trên AS có bảng Gradle ở bên phải. Nhấp chuộtGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Jemshit Iskenderov

Làm việc cho tôi.
negrotico19

Có, tôi đã gặp vấn đề tương tự trong dự án springBoot trên IntelliJ IDE, đề xuất này đã giải quyết vấn đề. Cảm ơn bạn @niklasingvar
Ermias K

41

Trong trường hợp của tôi, đó là toàn cầu .gitignore, như được giải thích trong câu trả lời của @ HankCa .

Thay vì mạnh mẽ thêm bình, điều bạn sẽ cần phải nhớ trong mỗi dự án Gradle, tôi đã thêm một ghi đè để bao gồm lại bình chứa trình bao bọc trong toàn cầu của tôi .gitignore:

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

Điều này hữu ích với tôi vì tôi có nhiều dự án sử dụng Gradle; Git bây giờ sẽ nhắc tôi bao gồm các lọ bọc.

Ghi đè này sẽ hoạt động miễn là không có thư mục nào ở trên gradle-wrapper.jar(chẳng hạn như gradlewrapper) bị bỏ qua - git sẽ không truy cập vào các thư mục bị bỏ qua vì lý do hiệu suất .


Vâng, đây là vấn đề tương tự trong trường hợp của tôi
silentsudo

22

Trong trường hợp của tôi, tôi đã bỏ wrapperthư mục con trong khi sao chép gradlethư mục và gặp lỗi tương tự.

Không thể tìm hoặc tải lớp chính org.gradle.wrapper.GradleWrapperMain

đảm bảo bạn có cấu trúc thư mục chính xác nếu bạn sao chép trình bao bọc từ vị trí khác.

├── xây dựng. Nâng cấp
├── lớp
└── bọc
│ ├── gradle-Wrapper.jar
└── gradle-wrapper.properations
├── gradlew
├── gradlew.bat
└── cài đặt. Nâng cấp

Tại sao bạn lại sao chép trình bao bọc? Đơn giản chỉ cần thực thi gradle wrappersẽ cho bạn kết quả chính xác;)
Xerus

@Xerus, trong một số env của công ty, có những hạn chế về mạng mà bạn không thể tự do tải xuống các gói. trong trường hợp này bạn phải sao chép / di chuyển.
yantaq

8

Bạn có thể đang thiếu gradle-wrapper.jartập tin theo thư mục gradle/wrappertrong dự án của bạn.

Bạn cần tạo tệp này qua tập lệnh này trong tệp build.gradle như bên dưới,

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

và chạy nhiệm vụ:

gradle wrapper

Với lớp 2.4 (hoặc cao hơn), bạn có thể thiết lập trình bao bọc mà không cần thêm tác vụ chuyên dụng:

gradle wrapper --gradle-version 2.3

HOẶC LÀ

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

Tất cả các chi tiết có thể được tìm thấy liên kết này


Rất nhiều lỗi trên windows 10 đối với "trình bao bọc lớp - Nâng cấp-phân phối-url my EntrypriseRep repository: 7070 / gradle / phân phối / Thẻ "
Tình yêu và hòa bình - Joe Codewell

Vâng, vấn đề là thiếu nội dung của gradle/wrapperdir. Điều này có thể được khắc phục bằng cách chạy gralde wrappernhư bạn đã nêu.
Yuri

Trong trường hợp lệnh này không hoạt động, trên AS có bảng Gradle ở bên phải. Nhấp chuộtGradle->ProjectName->ProjectName->Tasks->build setup->wrapper
Jemshit Iskenderov

4

bạn cũng có thể sao chép gradlew.bat vào thư mục gốc của bạn và sao chép gradlew-Wrapper vào thư mục gradlew.

đó là công việc cho tôi


4

Tôi đã làm theo câu trả lời từ phía trên khi tôi gặp phải điều này. Và nếu bạn đang gặp vấn đề này, hãy đảm bảo buộc đẩy cả tệp jar và thuộc tính. Sau hai điều này, tôi đã ngừng nhận được vấn đề này.

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

3

Trong trường hợp của tôi (sử dụng windows 10) gradlew.bat có các dòng mã sau:

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

Biến APP_HOME về cơ bản là thư mục gốc của dự án, vì vậy, nếu điều này bị rối theo một cách nào đó bạn sẽ nhận được:

Lỗi: Không thể tìm hoặc tải lớp chính org.gradle.wrapper.GradleWrapperMain

Đối với tôi, điều này đã bị rối tung vì cấu trúc thư mục dự án của tôi có dấu và (&) trong đó. Ví dụ: C: \ Test & Dev \ MyProject

Vì vậy, gradel đã cố gắng tìm tệp gradle-Wrapper.jar trong thư mục gốc của C: \ Test (tước bỏ mọi thứ sau và bao gồm cả '&')

Tôi đã tìm thấy điều này bằng cách thêm dòng sau bên dưới dòng APP_HOME =% DIRNAME% ở trên. Sau đó chạy tập tin bat để xem kết quả.

echo "%APP_HOME%"

Sẽ có một vài 'ký tự đặc biệt' khác có thể phá vỡ một đường dẫn / thư mục.


2

Tôi thấy lỗi tương tự nhưng trong trường hợp của tôi, đó là cài đặt Git mới mà không cài đặt LFS. Repo trong câu hỏi đã được thiết lập với LFS và gradle-Wrapper.jar nằm trong LFS nên nó chỉ chứa một con trỏ tới máy chủ LFS. Giải pháp rất đơn giản, chỉ cần chạy:

git lfs install

Và một bản sao mới đã làm điều đó. Tôi cho rằng git lfs pullhoặc chỉ git pullcó thể có thể giúp đỡ nhưng người gặp vấn đề đã quyết định làm một bản sao mới thay thế.


1

@HankCa cũng giải quyết vấn đề trong trường hợp của tôi. Tôi quyết định thay đổi sự **/*.jarbỏ qua nguy hiểm của mình thành những người tự giải thích src/**/lib/*.jarđể tránh những vấn đề như vậy trong tương lai. Bỏ qua bắt đầu bằng ** / * là một chút quá nguy hiểm, ít nhất là với tôi. Và luôn luôn là một ý tưởng tốt để có được ý tưởng đằng sau một hàng .gitignore chỉ bằng cách nhìn vào nó.


1

Trong trường hợp của tôi gradle-Wrapper.jar đã bị hỏng sau khi thay thế một loạt các tệp. Trở lại bản gốc đã giải quyết vấn đề.


1
Hey @ Neek Chào mừng bạn đến với Stack overflow xin vui lòng trả lời cho câu hỏi mới câu hỏi này đã có hơn 4 câu trả lời được chấp nhận vì vậy hãy tập trung vào phần đó.
Dilip

2
Chắc chắn rồi! tất cả các câu trả lời được chấp nhận ở trên không giúp tôi vì vậy tôi đưa ra những gì đã giúp tôi.
NeeK

1

Tôi đã khắc phục sự cố này bằng bản sửa lỗi tiếp theo (có thể nó sẽ giúp được ai đó):

Chỉ cần kiểm tra xem các thư mục mẹ của thư mục dự án của bạn có tên có dấu cách hoặc các ký tự bị cấm khác không. Nếu có - loại bỏ nó.

"C: \ Users \ someuser \ Test Project \ testProj" - trong trường hợp này "Dự án thử nghiệm" phải là "TestProjects".



0

Trong trường hợp của tôi, tôi đã loại bỏ các thư mục gradlew và gradle khỏi dự án. Reran dọn dẹp các tác vụ thông qua "Chạy nhiệm vụ Gradle" từ cửa sổ Dự án Gradle trong intellij

nhập mô tả hình ảnh ở đây



0

nếu đó là một dự án mới, hãy xóa thư mục hiện có và chạy $ npm install -g Reac -igen-cli

kiểm tra xem chạy không có lỗi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.