2015-10-07 118 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