简体   繁体   English

Java中找不到Dagger组件错误?

[英]Dagger component not found error in Java?

public class ToInject {
    public int val = 0;

    public ToInject(){
        System.out.println("Default");
    }
}
@Module
public class ToInjectModule {
    @Provides
    @Singleton
    public ToInject provideToInject(){
        return new ToInject();
    }
}
@Component(modules = ToInjectModule.class)
public interface ToInjectModuleComponent {
    WillGetInjected willGetInjectedMaker();
}
public class WillGetInjected {
    private ToInject toInject;
    @Inject
    public WillGetInjected(ToInject toInject){
        this.toInject = toInject;
        System.out.println(this.toInject.val);
    }
}

I am trying to inject ToInject into WillGetInjected as you see above. 我正尝试将ToInject注入WillGetInjected ,如上所示。 I have a ToInjectModule and als a ToInjectModuleComponent so I am following the instructions fully completely. 我有一个ToInjectModule和als ToInjectModuleComponent所以我完全完全按照说明进行操作。 I have also imported 我也进口了

<dependency>
            <groupId>com.google.dagger</groupId>
            <artifactId>dagger</artifactId>
            <version>2.0</version>
        </dependency>

But I keep getting this error when I do mvn compile : 但是当我执行mvn compile时,我总是收到此错误:

Fatal error compiling: java.lang.NoClassDefFoundError: dagger/Subcomponent$Builder: dagger.Subcomponent$Builder -> [Help 1]

Any idea what is happening and why? 知道发生了什么,为什么?

There are two missings. 有两个失踪案。

  1. Add dagger compiler into pom.xml ( Link ) dagger compiler添加到pom.xmlLink
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.6.1</version>
      <configuration>
        <annotationProcessorPaths>
          <path>
            <groupId>com.google.dagger</groupId>
            <artifactId>dagger-compiler</artifactId>
            <version>2.x</version>
          </path>
        </annotationProcessorPaths>
      </configuration>
    </plugin>
  </plugins>
</build>
  1. Add annotation scope into component. annotation scope添加到组件中。 ( Link see Singletons and Scoped Bindings ) 链接请参见Singletons and Scoped Bindings
@Component(modules = ToInjectModule.class)
public interface ToInjectModuleComponent {
    WillGetInjected willGetInjectedMaker();
}

to

@Singleton
@Component(modules = ToInjectModule.class)
public interface ToInjectModuleComponent {
    WillGetInjected willGetInjectedMaker();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM