2017-05-05 39 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