4

我有以下设置:

项目A build.grade:

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

在实施ParcelableSomeClass的 ProjectA 中

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

AutoValue 不会在 AutoValue_SomeClass 中生成任何 Parcelable 相关的方法。

但是,如果我将 auto-value-parcel annotationProcessor 直接包含到 ProjectA 中,问题就解决了。

项目A build.grade:

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

谁能解释auto-value-parcelannotationProcessor 是如何从 ProjectA 中排除的?

4

1 回答 1

8

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在所有项目上运行会更好。

于 2017-05-11T14:43:03.807 回答