当前位置: 首页 > 知识库问答 >
问题:

Dagger 2组件未生成用于构建的Dagger前缀类

魏凯捷
2023-03-14
Public class CoffeeApp {
    @Singleton
    @Component(modules = {DripCoffeeModule.class})
    public interface Coffee {

        CoffeeMaker maker();
    }
    public static void main(String args[]){


        Coffee coffee = DaggerCoffeeApp_Coffee.builder().build();
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.tim.test</groupId>
    <artifactId>Dagger2Experiment</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <slf4j-api.version>1.7.12</slf4j-api.version>
    </properties>
    <repositories>
        <repository>
            <id>sonatype</id>
            <name>sonatype-repo</name>
            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
        </repository>
    </repositories>
    <dependencies>

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

        </dependency>
        <dependency>
            <groupId>com.google.dagger</groupId>
            <artifactId>dagger-compiler</artifactId>
            <version>2.0.1</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j-api.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j-api.version}</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

</project>

https://github.com/google/dagger/blob/master/examples/simple/src/main/java/coffee/coffeeapp.java

任何帮助都将不胜感激。

共有1个答案

汝弘深
2023-03-14

更新是的,你发现我在略过这个问题。我没有阅读您的代码示例,否则我会看到pom.xml不是唯一的问题。

>

  • 我假设您的DripCoffeeModule注释正确,并且在其构造函数中没有参数,因此在构建组件时不需要指定这些参数。例如。:

    @Module
    
    public DripCoffeeModule {
    
    //Uses default constructor
    
    }
    

    我以前没有见过将组件实现为内部类,但我敢打赌,Dagger在实例化方面不会对此有任何不同。(我建议将其从CoffeeApp类中移出。)但是,命名是不正确的。而不是

    DaggerCoffeeApp_Coffee.builder().build();
    
    DaggerCoffee.builder().build();
    
    DaggerCoffee.create();
    
    DaggerCoffee.builder().dripCoffeeModule(new DripCoffeeModule()).build();
    

    原件

    将编译器从“依赖项”部分移到“编译器”部分。来自匕首2官方网站。

    在Maven项目中,可以在pom.xml的dependencies部分中包含运行时,并将dagger-compiler工件作为编译器插件的依赖项:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>com.google.dagger</groupId>
                        <artifactId>dagger-compiler</artifactId>
                        <version>2.0</version>
                        <optional>true</optional>
                    </dependency>
                </dependencies>
            </plugin>
    

  •  类似资料:
    • null null null 到目前为止,它与示例GitHub几乎相同。当dagger为src/main中的组件构建器生成代码时,它们会正确地生成。但是,Dagger并不为src/test中的组件构建器生成代码。 我的主要建筑。Gradle: 我的应用程序/Build.Gradle null null null 我不知道为什么它会构建到中间层,我假设我需要build.gradle文件来使用而不是,

    • :此接口包含此组件所需的所有方法。 现在,问题是,如果我在中执行此调用,则此类不是由Dagger生成的。如果调用相同的行,则由dagger生成de类,不会有任何问题。 我寻找的另一个解决方案是创建一个具有相同结构的其他不同类,并将作为内部对象,结果也是一样。

    • 我已经开始设置匕首2,并面临一个奇怪的问题,看起来像一个bug对我来说。 我有1个主组件和2个子组件,我‘加’在父组件中。我为每个子组件使用不同的。问题是,我可以很容易地为第一个子组件进行字段注入,但我不能为第二个子组件进行相同的注入。注入的字段保持%s。 我正在注射的对象: 这两个对象都具有作用域(作为它们的构造函数字段)。会不会是范围冲突? ---更新--- 我已经检查了由Dagger2生成的

    • 基本上,这个IThttps://github.com/ribot/android-boilerplate变成了Kotlin。

    • 事情是这样的...我认为注释处理器正在运行,但不知何故,android gradle插件无法在编译时输入生成的源代码。我检查了app/build/generated/source/apt/test/目录,并在其中发现,但由于某种原因,它没有作为依赖项导入。 有什么想法吗?这里是一个测试项目的链接,显示了我的问题

    • 我在使用gradlew(4.10.2)+dagger(2.18)时遇到了一个奇怪的问题。 问题是当我打电话的时候: /commonmodule_providesgsonFactory.java:6:错误:包javax.annotation.processing不存在导入javax.annotation.processing.generated; /commonmodule_providesgson