해당 이름의 작업이 이미 존재하므로 작업 '래퍼'를 추가 할 수 없습니다.


112

'react-native init AwesomeProject'를 설치할 때 다음을 실행할 때이 오류가 발생합니다 react-native run-android.

Could not determine java version from '11.0.1'.

빠른 Google은 distributionUrlGradle-wrapper에서을 업데이트해야한다고 제안합니다 . 이 작업을 수행하면 새로운 오류가 발생합니다.

Cannot add task 'wrapper' as a task with that name already exists.

문제가 파일에 있음을 나타냅니다.

/AwesomeProject/android/build.gradle' line: 36

이렇게 생겼어

task wrapper(type: Wrapper) {
    gradleVersion = '4.4'
    distributionUrl = distributionUrl.replace("bin", "all")
}

나는 이것이 무엇을하는지 알아 내기 위해 앞뒤로 노력 해왔다. 상자에서 바로 작동하지 않는 것이 이상해 보입니다. 비슷한 문제에 직면 한 사람이 있습니까?


4
업데이트가 있거나 올바른 답변이 있습니까? 그렇지 않다면 어떻게 해결 했습니까? 답변에 다른 틱 오른쪽 아이콘 >> :-).
— ganeshdeshmukh

답변:


160

업데이트 할 수도 있습니다.

task wrapper(type: Wrapper) {
    gradleVersion = '4.4'    
    distributionUrl = distributionUrl.replace("bin", "all")
}

에

wrapper {
    gradleVersion = '4.4'
    distributionUrl = distributionUrl.replace("bin", "all")
}

같이

이제 4.8에서 더 이상 사용되지 않는 기본 제공 작업을 재정의하면 오류가 발생합니다.

기본 제공 작업을 교체하려고하면 다음과 유사한 오류가 발생합니다.

해당 이름의 작업이 이미 존재하므로 작업 'wrapper'를 추가 할 수 없습니다.

작업 및 속성 의 마지막 단락을 참조하십시오 : https://docs.gradle.org/5.2.1/userguide/upgrading_version_4.html

그리고 래퍼 작업을 사용자 정의 : https://docs.gradle.org/5.2.1/userguide/gradle_wrapper.html#customizing_wrapper


9
이 답변은 OP의 실제 질문에 대한 답변은 아니지만 저와 같은 Google 직원에게 매우 도움이 되었기 때문에 찬성했습니다.
— Franklin Yu

OP의 문제를 해결합니다. 그는 고대 Gradle 버전을 사용하고 있었고 오래된 솔루션을 사용하여 업데이트에 묶여 있었고이 답변은 올바른 솔루션을 제공합니다. (당신이 가지고가는 경우 물론, @FranklinYu는, "사람이 유사한 문제에 직면하고있다?"는 OP의 질문, 다음 간단한 "예"충분한다.)
— 마이클 Piefel

91

환경에서 사용하는 Gradle 버전은 무엇입니까?

Gradle 버전 5.x를 사용하는 경우 아래와 같이 「작업 래퍼」를 수정해야합니다.

task wrapper(type: Wrapper) {
    gradleVersion = '4.4'
    distributionUrl = distributionUrl.replace("bin", "all")
}

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

wrapper {
    gradleVersion = '4.4'
    distributionUrl = distributionUrl.replace("bin", "all")
}

그런 다음이 오류가 발생했습니다. 무엇을해야할지 알 수 없습니다. 오류 : org.gradle.api.Project 유형의 루트 프로젝트 'myproject'에서 인수 [{type = class org.gradle.api.tasks.wrapper.Wrapper}, build_81gq92nveejavsi3t9efznmk8 $ _run_closure2 @ 55f5bac8]에 대한 메소드 wrapper ()를 찾을 수 없습니다. .
— buddhiv

21

댓글에서 언급했듯이 https://stackoverflow.com/a/46867575/4982729 :

  1. 파일을 열고 편집하십시오 app-folder/android/gradle/wrapper/gradle-wrapper.properties. 라인 업데이트

    distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
  2. 파일에서 AwesomeProject/android/build.gradle주석 처리를 시도하십시오.

    task wrapper(type: Wrapper) {
        gradleVersion = '4.4'
        distributionUrl = distributionUrl.replace("bin", "all")
    }
    

12

"gradle-wrapper.properties"파일에 이미 이러한 코드가있는 경우

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

그런 다음 제거 할 수 있습니다.

task wrapper(type: Wrapper) {
    gradleVersion = '4.4'
    distributionUrl = distributionUrl.replace("bin", "all")
}

build.gradle에서


1

나는 같은 문제가 있습니다. 내 코드의 문제는 build.gradle의 다른 Gradle 파일에 대한 이중 선언이었습니다.

build.gradle

apply from: otherFile.gradle
... build. gradle code...
apply from: otherFile.gradle //Again 

0

build.gradle 파일에서 실행할 "작업"이있을 가능성이 높습니다. 래퍼와 관련된 줄 (괄호 등 포함)을 제거하십시오. 그런 다음 IntelliJ를 사용하는 경우 새 항목을 작업 디렉터리로 자동으로 가져옵니다.


0

로컬 gradle 래퍼가 아닌 전역 gradle을 사용하여 작업을 실행했기 때문에 문제가 발생했습니다 .

즉, 현재 디렉토리에 gradlew실행 파일이 있습니다.

하지만이 명령을 실행했습니다.

gradle <task>

실행해야 할 때 :

./gradlew <task>

아마도 전역 gradle을 실행하면 로컬 래퍼를 만들려고 시도하고 이미 존재하기 때문일 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.