2017-09-29 40 views
0

我有一個項目與21個子項目。其中一個子項目有其自己的build.gradle文件,因爲它有點模糊。孩子build.gradle不評估afterEvaluate事件

現在,我在配置階段需要的構建中有一個配置設置。所以,在我的插件,我有

project.afterEvaluate { 
    if (project == project.rootProject) { 
     project.allprojects.each { proj -> 
     MetaExtension config = proj.getExtensions().getByType(MetaExtension) 
     if (config.inventoryHash == null){ 
     throw new ProjectHashNotSetException(proj.name) 
     } 
    } 
    } 
} 

現在,如果我在一個文件的build.gradle擁有的一切,這一切完美的作品。但是,一旦我將第21個子項目打包到它自己的build.gradle文件中,它現在總是返回爲空。複製並返回到一個build.gradle文件,工作正常,2個gradle文件失敗。

這是爲什麼?

+0

第21個子項目的build.gradle文件的內容是什麼?與此處引用的相同嗎?另外,你提到一個插件。你在寫插件嗎? –

+0

LOL,該項目是一系列插件。這是一個小的。第21版build.gradle的文件內容是一些自定義的依賴編譯器,用於某些腦外科醫生幾年前決定在我公司發明的語言。 – scphantm

+0

那麼根項目是否知道子項目呢?你的settings.gradle中有什麼? – LazerBanana

回答

0

afterEvaluate是項目的一種方法,在評估項目後評估,而不是在所有項目評估完畢後評估。

您需要重構您的邏輯。你可以e。 G。添加一個​​或evaluationDependsOn '21st-project',那麼你根本不需要afterEvaluate

其實如果顯示的代碼是你的實際代碼,反正它有點奇怪。您爲所有項目添加afterEvaluate操作,但只有在它是根項目時才執行。您也可以將操作添加到根項目中,然後忽略條件。或者甚至更好,只需添加一個afterEvaluate該檢查正是項目像

project.afterEvaluate { 
    MetaExtension config = extensions.getByType(MetaExtension) 
    if (!config.inventoryHash) { 
    throw new ProjectHashNotSetException(name) 
    } 
} 

每個項目,然後評估順序並不重要,因爲每個單獨檢查。如果你願意,這對於項目解耦也更好。 G。曾經想要使用按需配置,這是您的方法無法實現的。