2015-10-07 120 views
4

我是新来的匕首2,并试图在IntelliJ中的Dagger 2咖啡示例,它似乎不会生成DaggerCoffeeApp_Coffee(它应该生成它),即使我紧跟在Github上的Dagger 2的代码示例。匕首2组件不生成匕首前缀类为建设

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(); 
    } 
} 

这是我的pom.xml文件。

<?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> 

我尝试了各种解决方案,从下面的话题,但似乎没有任何工作:

我还添加jar文件到我的应用程序构建路径匕首2.0.1.jar在应用程序的运行时间和dagger-编译时编译器2.0.1.jar。

更新 我用DaggerCoffeeApp_Coffee.builder()建()的代码片段上面,因为我修改了代码,请按照下面后,我找不到构造匕首2的GitHub上的代码示例。链接如下:

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

任何帮助将不胜感激。

+1

main()上的不平衡大括号? –

+0

哎呀感谢您指出。我会编辑它,因为它是一个复制和粘贴错误。大括号在我的代码中是正确的:) – t22000

+0

不要声明'dagger-compiler'是可选的。我在android中为'dagger-compiler'使用gradle'provided'并将其设置为'compile'修复了它。 –

回答

1

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

  1. 我假设你DripCoffeeModule正确注释,并在其构造函数没有参数,使您不必在构建组件来指定。例如。 :

    @Module 
    
    public DripCoffeeModule { 
    
    //Uses default constructor 
    
    } 
    
  2. 我从来没见过像以前那样一个内部类实现的成分,但我敢打赌,匕首不会把这个有什么不同实例中的条款。 (我建议将它移出CoffeeApp类。)但是,命名不正确。取而代之的

    DaggerCoffeeApp_Coffee.builder().build(); 
    

你必须遵循匕首定义的命名约定。从标题为在匕首的网站建设图表部分:

实现具有相同的名称与匕首前缀的接口。

所以,你需要修改行:

DaggerCoffee.builder().build(); 

,或者你可以用简便方法:

DaggerCoffee.create(); 

如果我错了号码1,那么您将需要构建你的模块,就像这样:

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

原始

将编译器从依赖关系部分移到编译器部分。来自Dagger 2官方网站。

在Maven项目,一个将包括在你的pom.xml的依赖关系部分的运行时间,并匕首编译神器的编译器插件的依赖:

例如:

<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> 
+0

我搬了它,但它不工作: – t22000

+0

感谢您花时间回头看看它,我尝试了你的建议,并且没有DaggerCoffee构造函数,有趣的是我看了一下Dagger 2的github代码并作了相应的修改。 : https://github.com/google/dagger/blob/master/examples/simple/src/main/java/coffee/CoffeeApp.java – t22000

+0

我会更新我的文章以提供更多的上下文。 – t22000