Android Gradle注解处理器在父模块中不可用

4
我正在使用以下设置:
ProjectA build.gradle:
(注:此文本为代码片段,无法准确翻译)
dependencies {
    compile (project(':ProjectB'))
}

ProjectB 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"
}

在ProjectA中,实现了Parcelable接口的SomeClass类。
@AutoValue
public abstract class SomeClass implements Parcelable {
...
}

AutoValue 不会在 AutoValue_SomeClass 中生成任何 Parcelable 相关的方法。
但是,如果我直接在 ProjectA 中包含 auto-value-parcel 注解处理器,问题就会得到解决。
ProjectA 的 build.gradle:
dependencies {
    compile (project(':projectB'))
    annotationProcessor 'com.ryanharter.auto.value:auto-value-parcel:0.2.5'
}

有人能解释一下如何将自动值包注解处理器从ProjectA中排除吗?

如果您将annotationProcessor auto-value...annotationProcessor auto-value-parcel都放在模块B中,而且前者排在后者之前,会发生什么? - wasyl
没有运气,尝试了几乎所有这三个项目的组合排序。 - dkarmazi
1个回答

9

annotationProcessor 依赖项不会被导出到其他项目中。而且这些依赖项也不会随着库一起导出。

AutoValue 本身可以正常工作,因为你使用了 compile 依赖项进行定义。但这也是你不应该做的。因此,更好的依赖关系设置如下所示...

ProjectB

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更好。


感谢清晰的解释!我得出了相同的结论,即注解处理器仅在其模块范围内有效。我尝试搜索有关注解处理器的任何文档,但没有找到任何信息。请问您是否可以分享有关注解处理器的任何资源/文档? - dkarmazi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接