2017-05-05 136 views
0

我有以下設置:Android的搖籃annotationProcessor父模塊不可

項目A build.gralde:

dependencies { 
    compile (project(':ProjectB')) 
} 

項目B的build.gradle:

dependencies { 
    annotationProcessor 'com.ryanharter.auto.value:auto-value-parcel:0.2.5' 
    compile "com.google.auto.value:auto-value:1.3" 
    annotationProcessor "com.google.auto.value:auto-value:1.3" 
} 

而且SomeClass正在實施Parcelable的ProjectA

@AutoValue 
public abstract class SomeClass implements Parcelable { 
... 
} 

AutoValue不會在AutoValue_SomeClass中生成任何與Parcelable相關的方法。

但是,如果我將自動值包裹批註處理程序直接包含到ProjectA中,問題就解決了。

項目A build.gralde:

dependencies { 
    compile (project(':projectB')) 
    annotationProcessor 'com.ryanharter.auto.value:auto-value-parcel:0.2.5' 
} 

任何人都可以解釋如何auto-value-parcel annotationProcessor被排除在項目A?

+0

如果在模塊B中同時放置了'annotationProcessor auto-value ...'_before_'annotationProcessor auto-value-parcel'會怎麼樣? – wasyl

+0

沒有運氣,嘗試幾乎所有組合訂購這3個項目 – dkarmazi

回答

1

annotationProcessor依賴項不會導出到其他項目。而且這些不會與庫導出。

AutoValue本身有效,因爲您使用compile依賴關係來定義它。這是你不應該做的。因此,一個更好的依賴設置會是什麼樣子......

項目B

dependencies { 
    provided "com.jakewharton.auto.value:auto-value-annotations:$autoValueVersion" 
    annotationProcessor "com.google.auto.value:auto-value:$autoValueVersion" 
    annotationProcessor "com.ryanharter.auto.value:auto-value-parcel:$autoValueParcelVersion" 
} 

項目A

dependencies { 
    compile project(':ProjectB') 
    provided "com.jakewharton.auto.value:auto-value-annotations:$autoValueVersion" 
    annotationProcessor "com.google.auto.value:auto-value:$autoValueVersion" 
    annotationProcessor "com.ryanharter.auto.value:auto-value-parcel:$autoValueParcelVersion" 
} 

但沒有annotationProcessor在所有項目上運行會更好。

+0

感謝您的明確解釋!我一直認爲annotationProcessor在其模塊範圍內是有效的。我試圖在annotationProcessor上搜索任何文檔,但找不到任何東西。 你介意在annotationProcessor上分享任何資源/文檔嗎? – dkarmazi