Groovy 如何使用 Dagger?

How to use Dagger for Groovy?

如何配置 dagger 注入 groovy classes,以及注入 groovy classes?

我最初试图让 dagger 将 groovy class 注入我的 java 应用程序,但我发现 dagger 抱怨 groovy class 没有找到。查看日志,似乎 compileGroovy 发生在 compileJava 之后。而dagger编译器的注解处理好像在compileJava。我猜这可能是问题所在——目前没有 groovy classes 可用。但我还没有找到一种方法来强制 dagger 或 groovy 与另一个一起工作。

我好像无法上传.tar.gz。但是如果有人需要我想要实现的最小演示代码,这些可能会有所帮助(gradle 7):

build.gradle:

plugins {
  id 'groovy'
  id 'java'
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
  mavenCentral()
}

dependencies {
  annotationProcessor 'com.google.dagger:dagger-compiler:2.+'
  implementation 'com.google.dagger:dagger:2.+'
  implementation 'org.codehaus.groovy:groovy-all:3.+'
}

settings.gradle:

rootProject.name = 'groovy-dagger1'

src/main/groovy/org/example/dagger/MainComponent.groovy:

package org.example.dagger

import dagger.Component

@Component(modules = [
    MainModule,
])
interface MainComponent {
  String message();
}

src/main/groovy/org/example/dagger/MainModule.groovy:

package org.example.dagger

import dagger.Module
import dagger.Provides

@Module
final class MainModule {
  @Provides
  static String message() {
    return 'Hello Groovy Dagger!'
  }
}

src/main/groovy/org/example/main/Main.groovy:

package org.example.main;

class Main {
  static void main(String[] args) {
// Dagger component does not exist :/
// println DaggerMainComponent.create().message()
  }
}

默认情况下,groovy 编译器不会 运行 java 注释处理器...

您可以将此添加到您的 build.gradle:

compileGroovy {
    groovyOptions.javaAnnotationProcessing = true
}

你当然需要添加一个导入

import org.example.dagger.DaggerMainComponent

Main.groovy