【问题标题】:Generated Code from Gradle Plugin not visible to Dagger compiler using android-apt从 Gradle 插件生成的代码对使用 android-apt 的 Dagger 编译器不可见
【发布时间】:2017-06-03 19:32:02
【问题描述】:

我正在尝试编写一个自定义插件,它将从我的 android 项目中的一些 xml 文件中生成一些代码(特别是 Dagger 模块)。我已经能够生成代码,但是当我尝试在 Dagger 组件中使用生成的模块时,Dagger 编译器失败:

我整理了一个 small demo project 来演示失败。有两个模块:插件和 android 应用程序(仅供参考:我必须在应用程序的 build.gradle 中注释掉与插件相关的代码,直到我在本地安装了插件)。

当我重新构建应用程序时,生成的模块会显示在我期望的位置,并且 dagger 组件会在 IJ 中看到它。但在 android-apt 插件调用 dagger 编译器时它显然不可用(或者该位置未包含在编译器正在查看的代码中)。

我确保所有编译任务都依赖于我的“生成”任务,而失败的任务是 compileDebugJavaWithJavac,因此它应该知道我生成的代码。

为了尝试包含源代码,我有:

AndroidSourceSet mainSourceSet = p.android.sourceSets.getByName('main')
LOG.info("Adding directory ${outputDir} to android source set ${mainSourceSet}")
mainSourceSet.java.srcDir(outputDir)

尽管如此,我得到:

Compiling with JDK Java compiler API.
C:\projects\java\android\android_plugin_demo\plugindemoapplication\src\main\java\com\bdl\plugindemoapplication\DaggerComponent.java:12: error: cannot find symbol
@Component(modules = PluginDaggerModule.class)
                     ^
  symbol: class PluginDaggerModule
C:\projects\java\android\android_plugin_demo\plugindemoapplication\src\main\java\com\bdl\plugindemoapplication\DaggerComponent.java:13: error: dagger.internal.codegen.ComponentProcessor was unable to process this interface because not all of its dependencies could be resolved. Check for compilation errors or a circular dependency with generated code.
public interface DaggerComponent {
       ^
2 errors

那么,让 dagger 编译器看到我生成的代码,我缺少什么魔法?

【问题讨论】:

    标签: android gradle gradle-plugin


    【解决方案1】:

    经过更多的实验,我相信我已经找到了答案。我还不知道为什么这行得通,但如果我将输出目录添加到 AndroidSourceSet 的 srcDir 到 p.afterEvaluate 闭包之前,它似乎找到了它。

    这对我来说似乎很奇怪,因为任务依赖项仅添加在 afterEvaluate 块中,并且看起来新任务在编译之前已执行,因此即使没有此更改,我也希望 srcDir 添加到也可以在编译尝试之前执行。

    但至少我现在可以使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 2023-03-14
      • 1970-01-01
      • 2021-09-13
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多