2017-02-19 142 views
0

我有一個Gradle根項目P,其中有兩個子項目P:fooP:bar。自然,Gradle按字母順序構建它們:barfoo。但我需要foo第一個時,我說gradle buildP根目錄。這是因爲bar取決於foo發佈到本地Maven存儲庫的AAR(Android庫)工件。 barfoo都是這樣的Android庫項目。Gradle模塊構建命令

這看起來像一個簡單的問題,但我無法弄清楚。我讀了evaluationDependsOn,所以在bar/build.gradle,我在第一行說:evaluationDependsOn "foo:"。唉,這似乎沒有任何影響。這個Gradle功能最終是否被破壞?

使用compile project,我可以強制foo首先被構建,但是這會將編譯後的類直接添加到我不想要的bar

所以我卡住了。我可以將foo重新命名爲aaa_foo,我的所有問題都將消失,但我毫不猶豫地稱這是一個解決方案。

+0

「使用編譯項目,我可以強制foo被首先構建,但是這會將編譯後的類直接添加到bar,我不想這樣做」 - 只有當bar是一個應用程序模塊時,你應該想擁有'foo'類。如果'bar'是一個庫模塊,'foo'類將不會進入'bar' AAR。 – CommonsWare

+0

如果我說'compile project',Gradle會嘗試連接庫兩次(一次用於「compile project」,一次用於Maven-repository依賴),並且我得到錯誤消息「Error:多個包含軟件包名稱的庫'com.acme.frob'」。 – phkoester

+0

然後你的Gradle構建腳本有問題。由於你的問題不包括他們,我不能確切地告訴你你錯在哪裏。但是我的CWAC幾乎每個庫都有兩個模塊:庫和鏈接到庫的演示項目。有時一個項目有兩個庫或兩個演示。他們都使用'compile project()'(在同一個總體項目中用於庫到庫的依賴關係)或'debugCompile project()'(用於演示庫到庫的依賴關係,我使用'releaseCompile'來確認我可以從我的工件存儲庫中獲取)。 – CommonsWare

回答

1

好的,讓我自己回答這個問題。我想我找到了一個體面的解決方案。

一個項目依賴在搖籃通常是由於的compile project手段,它不僅促進了其他項目,但還增加了其他項目的類別,目前該項目的類路徑中表示。如果您只想確保在您之前構建另一個項目,則可以使用任務依賴項

在我的Android環境中,bar/build.gradle,我說

preBuild.dependsOn ":foo:build" 

,一切都很好。現在foo始終構建於bar之前。