首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用android-apt的Dagger编译器看不到Gradle插件生成的代码

使用android-apt的Dagger编译器看不到Gradle插件生成的代码
EN

Stack Overflow用户
提问于 2017-06-04 03:32:02
回答 1查看 208关注 0票数 0

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

我已经编写了一个small demo project来演示失败的原因。有两个模块:插件和安卓应用程序(仅供参考:我不得不在应用程序的build.gradle中注释掉与插件相关的代码,直到我在本地安装了插件)。

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

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

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

代码语言:javascript
复制
AndroidSourceSet mainSourceSet = p.android.sourceSets.getByName('main')
LOG.info("Adding directory ${outputDir} to android source set ${mainSourceSet}")
mainSourceSet.java.srcDir(outputDir)

尽管如此,我还是得到了:

代码语言:javascript
复制
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编译器看到我生成的代码呢?

EN

回答 1

Stack Overflow用户

发布于 2017-06-06 00:15:56

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

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

但至少我现在让它工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44347826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档