簡體   English   中英

如何在gradle中過濾子模塊以應用適當的插件?

[英]How to filter submodules in gradle to apply appropriate plugin?

我有一個多模塊項目,其中一些是Java庫和其他Android庫。 我想根據項目類型為我的子項目(模塊)應用自定義插件,所以我在項目root的build.gradle文件中做了類似的事情(見下面的代碼片段)。 這個設置正在運行,但我想知道是否還有其他方法可以做到這一點。 Gradle建議按屬性過濾,但我收到錯誤Cannot add task 'integTest' as a task with that name already exists如果我嘗試的話Cannot add task 'integTest' as a task with that name already exists integTest是我在customJavaBuild.gradlecustomAndroidBuild.gradle文件中創建的任務。 任何幫助表示贊賞。 謝謝!

def javaLibraries = ["projA", "projB"]
def androidLibraries = ["projC"]

subprojects {
    if (javaLibraries.contains(it.name)) {
        apply from: '$rootDir/gradle/customJavaBuild.gradle'
    } else if (androidLibraries.contains(it.name)) {
        apply from: '$rootDir/gradle/customAndroidBuild.gradle'
    } else {
        //Apply custom plugin for some other project type.
    }
} 

按屬性過濾

subprojects {
    project.ext {
        projectType = null
    }

    project.afterEvaluate {
        if (project.ext.projectType == 'jar') {
            apply from: '$rootDir/gradle/customJavaBuild.gradle'
        } else if (project.ext.projectType == 'aar') {
            apply from: '$rootDir/gradle/customAndroidBuild.gradle'
        } else {
            //Apply custom plugin for some other project type.
        }
    }
}

我在我的子模塊'(projA,projB,projC) build.gradle文件中有這個額外的屬性ext.projectType = 'jar'

問題是在您的project.afterEvaluate塊中,您將自定義gradle腳本應用於root project而不是應用於已評估的sub project ,這會導致已定義integTest任務的錯誤。

您應該使用類似於以下內容的內容重寫project.afterEvaluate塊:

subprojects {
    project.ext {
        projectType = null
    }

    project.afterEvaluate {
        if (project.ext.projectType == 'jar') {
            // WARNING : use "project.apply ..." instead of "apply ..." here
            project.apply from : "$rootDir/gradle/customJavaBuild.gradle"
        } else if (project.ext.projectType == 'aar') {
            project.apply from : "$rootDir/gradle/customAndroidBuild.gradle"
        } else {
            // nothing
        }
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM