我有一個Gradle根項目P
,其中有兩個子項目P:foo
和P:bar
。自然,Gradle按字母順序構建它們:bar
,foo
。但我需要foo
第一個時,我說gradle build
在P
根目錄。這是因爲bar
取決於foo
發佈到本地Maven存儲庫的AAR(Android庫)工件。 bar
和foo
都是這樣的Android庫項目。Gradle模塊構建命令
這看起來像一個簡單的問題,但我無法弄清楚。我讀了evaluationDependsOn
,所以在bar/build.gradle
,我在第一行說:evaluationDependsOn "foo:"
。唉,這似乎沒有任何影響。這個Gradle功能最終是否被破壞?
使用compile project
,我可以強制foo
首先被構建,但是這會將編譯後的類直接添加到我不想要的bar
。
所以我卡住了。我可以將foo
重新命名爲aaa_foo
,我的所有問題都將消失,但我毫不猶豫地稱這是一個解決方案。
「使用編譯項目,我可以強制foo被首先構建,但是這會將編譯後的類直接添加到bar,我不想這樣做」 - 只有當bar是一個應用程序模塊時,你應該想擁有'foo'類。如果'bar'是一個庫模塊,'foo'類將不會進入'bar' AAR。 – CommonsWare
如果我說'compile project',Gradle會嘗試連接庫兩次(一次用於「compile project」,一次用於Maven-repository依賴),並且我得到錯誤消息「Error:多個包含軟件包名稱的庫'com.acme.frob'」。 – phkoester
然後你的Gradle構建腳本有問題。由於你的問題不包括他們,我不能確切地告訴你你錯在哪裏。但是我的CWAC幾乎每個庫都有兩個模塊:庫和鏈接到庫的演示項目。有時一個項目有兩個庫或兩個演示。他們都使用'compile project()'(在同一個總體項目中用於庫到庫的依賴關係)或'debugCompile project()'(用於演示庫到庫的依賴關係,我使用'releaseCompile'來確認我可以從我的工件存儲庫中獲取)。 – CommonsWare