Cannot add task 'wrapper' as a task with that name already exists
AndroidReactjsReact NativeWrapperExpoAndroid Problem Overview
When installing 'react-native init AwesomeProject' I get this error when I run react-native run-android
:
Could not determine java version from '11.0.1'.
A quick google suggests I need to update the distributionUrl
in the Gradle-wrapper. Having done this I am faced with a new error:
Cannot add task 'wrapper' as a task with that name already exists.
It suggests the issue is in the file:
/AwesomeProject/android/build.gradle' line: 36
which looks like this
task wrapper(type: Wrapper) {
gradleVersion = '4.4'
distributionUrl = distributionUrl.replace("bin", "all")
}
I've been back and forth trying to figure out what this does. It seems odd that something wouldn't work straight out of the box. Is anybody facing a similar issue?
Android Solutions
Solution 1 - Android
You can also update
task wrapper(type: Wrapper) {
gradleVersion = '4.4'
distributionUrl = distributionUrl.replace("bin", "all")
}
to
wrapper {
gradleVersion = '4.4'
distributionUrl = distributionUrl.replace("bin", "all")
}
As > Overriding built-in tasks deprecated in 4.8 now produces an error. > > Attempting to replace a built-in task will produce an error similar to the following: > > > Cannot add task 'wrapper' as a task with that name already exists.
see the last paragraph of Tasks & properties: https://docs.gradle.org/5.2.1/userguide/upgrading_version_4.html
and Customizing the Wrapper task: https://docs.gradle.org/5.2.1/userguide/gradle_wrapper.html#customizing_wrapper
Solution 2 - Android
which version of gradle do you use in your environment?
If you use gradle version 5.x you have to modify 「task wrapper」 as below.
task wrapper(type: Wrapper) {
gradleVersion = '4.4'
distributionUrl = distributionUrl.replace("bin", "all")
}
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
wrapper {
gradleVersion = '4.4'
distributionUrl = distributionUrl.replace("bin", "all")
}
Solution 3 - Android
if "gradle-wrapper.properties" file already have these codes
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
then you can remove
task wrapper(type: Wrapper) {
gradleVersion = '4.4'
distributionUrl = distributionUrl.replace("bin", "all")
}
from build.gradle
Solution 4 - Android
As mentioned in the comments follow - https://stackoverflow.com/a/46867575/4982729:
-
Open and edit the file
app-folder/android/gradle/wrapper/gradle-wrapper.properties
; update the linedistributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip
-
In file
AwesomeProject/android/build.gradle
try commenting outtask wrapper(type: Wrapper) { gradleVersion = '4.4' distributionUrl = distributionUrl.replace("bin", "all") }
Solution 5 - Android
I have the same issue. the problem in my code was a double declaration on another Gradle file in build.gradle
build.gradle
apply from: otherFile.gradle
... build. gradle code...
apply from: otherFile.gradle //Again
Solution 6 - Android
There's a high chance you have a "task" to run in your build.gradle file, go and remove the line related to wrapper (including its bracket and so on). Then, if you are using IntelliJ, it will automatically bring the new one to your working directory.
Solution 7 - Android
I ran into the issue because I was running my task using the global gradle, and not my local gradle wrapper.
i.e. in my current directory I had a gradlew
executable.
But I was running this command:
gradle <task>
When I should have been running:
./gradlew <task>
Presumably because running the global gradle tries to create a local wrapper -- and one already existed.