我想寫一個自定義插件,將生成一些代碼(特別是一個Dagger模塊)關閉我的Android項目中的一些xml文件。我已經能夠獲得代碼生成,但是當我嘗試在匕首組件中使用生成的模塊時,Dagger編譯器失敗:從Gradle插件生成的代碼不可見使用android-apt的Dagger編譯器
我已經放在一起演示了失敗的small demo project。有兩個模塊:插件和Android應用程序(僅供參考:我必須在應用程序的build.gradle中註釋與插件相關的代碼,直到我在本地安裝插件)。
當我重建應用程序時,生成的模塊出現在我期望的位置,而匕首組件在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
那麼,是什麼魔力我思念到允許匕首編譯器看到我生成的代碼?