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


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.