我该如何在Android模块之间共享使用annotationProcessor的依赖?

5

我有一个Android应用程序模块(A)和一个Android库模块(B)。 (A)和(B)都包含以下相同的依赖项:

dependencies {
   implementation 'com.jakewharton:butterknife:8.8.1'
   annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}

然而,在我的项目中,模块(A) 依赖于模块(B),因此我在 Stack Overflow 上搜索了如何实现 不要重复自己 设计模式,以便我只在模块(B) 中包含这些依赖项。我发现这篇文章很有用,但我没有找到如何让这个依赖关系。
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1

这两个模块之间是共享的, 那我该怎么做呢?


2
这是一个注解而不是依赖项,所以我不认为它可以在模块之间共享,很遗憾。 - Jules
3
经过长时间的搜索,我发现应该在每个模块中添加它。 - Abdulmalek Dery
1个回答

1

针对不同的代码库

注解处理器是构建时依赖项,但不是运行时依赖项。您不应该强制所有使用您的库的用户(以及他们的库的用户)使用特定的注解处理器。与库不同,仅因为您正在使用它,并不意味着您的库的用户也必须使用它。

在某些罕见情况下,创建一个Gradle插件来简化用户的构建配置可能是明智的选择。这样的插件可以自动将注解处理器和库添加到项目中。无论如何,即使只有这两个依赖项实际上是一起使用的,也可能不足以证明需要创建这样的插件。

针对同一代码库中的多个项目

您可能决定为整个代码库使用特定的注解处理器。在这种情况下,您可以从根目录中的build.gradle为所有Gradle项目启用注解处理器。

allprojects {
  pluginManager.withPlugin('java') {
    dependencies {
      implementation 'com.jakewharton:butterknife:8.8.1'
      annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    }
  }
}

好的解决方案和清晰的解释。它值得成为被采纳的答案。 - Abdulmalek Dery

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