Gradle productFlavors 引发错误 - 无法添加任务“:assembleTest”,因为具有该名称的任务已存在

Posted

技术标签:

【中文标题】Gradle productFlavors 引发错误 - 无法添加任务“:assembleTest”,因为具有该名称的任务已存在【英文标题】:Gradle productFlavors raises error - Cannot add task ':assembleTest' as a task with that name already exists 【发布时间】:2014-04-04 23:39:30 【问题描述】:

Gradle 新手,尝试创建构建变体。我刚刚在 gradle 文件中添加了一个 productFlavor,突然出现了这个奇怪的错误


$ gradle tasks
Creating properties on demand (a.k.a. dynamic properties) has been deprecated and is scheduled to be removed in Gradle 2.0. Please read http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html for information on the replacement for dynamic properties.
Deprecated dynamic property: "srcDirs" on "source set aild", value: "[src]".

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'SegmentIO'.
> Cannot add task ':assembleTest' as a task with that name already exists.

这是我完整的 build.gradle


buildscript 
    repositories 
        mavenCentral()
    

    dependencies 
        classpath 'com.android.tools.build:gradle:0.8.+'
    


apply plugin: 'android'


dependencies 
    compile files('libs/android-support-v4.jar')


android 
    buildToolsVersion "19.0.1"
    compileSdkVersion 17

    productFlavors 
        test 
        

        prod 
        
    

     sourceSets 
        main 
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src', 'bundled-src']
            resources.srcDirs = ['src']
            aild.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
        

        // test.assets.srcDirs = ['$java-project-root/assets/test']
        // prod.assets.srcDirs = ['$java-project-root/assets/test']

        instrumentTest.setRoot('tests')
    

    dependencies 
        compile fileTree(dir: './libs', include: 'Amplitude.jar')
    

【问题讨论】:

【参考方案1】:

我看到两个问题:

Deprecated dynamic property: "srcDirs" on "source set aild", value: "[src]".

是因为您在构建文件中拼错了aild.srcDirs——它应该是aidl.srcDirs

> Cannot add task ':assembleTest' as a task with that name already exists.

是因为您正在尝试创建一个名为“test”的风味,但它正在被构建中的其他东西使用并且它正在发生冲突。尝试使用其他名称。

更具体地说,Android 插件根据风味名称执行许多任务(它也对构建类型执行此操作)。如果你有一个风味名称“foo”,assembleFoo 会执行 assemble,但只针对 foo 风味。已经有一个 assembleTest 任务,所以当它试图根据你的喜好创建一个任务时会发生冲突。

【讨论】:

谢谢 - 是的味道名称“测试”是问题 有没有办法覆盖它的命名方案? @CasualT 我不这么认为。 谢谢。 :) 那我可能会提出一个新问题。我在这个奇怪的空间中,我希望基于引用 maven 工件和引用本地模块来获得不同的风格,但是本地模块与工件发生冲突。

以上是关于Gradle productFlavors 引发错误 - 无法添加任务“:assembleTest”,因为具有该名称的任务已存在的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle 插件ProductFlavor 配置 ( ProductFlavor#resValue 方法 | ProductFlavor#dimension 维度属性 )

Android Gradle中的productFlavors

AndroidStudio 升级3.4后gradle引发的多渠道多任务异常

Android Gradle 插件ProductFlavor 配置 ( ProductFlavor#jackOptions 配置 | javaCompileOptions 配置 )

Android Gradle中的productFlavors

Android Gradle 插件ProductFlavor 配置 ( ProductFlavor#buildConfigField 方法 | 单独编译生成 BuildConfig 类的任务 )