2017-09-06 32 views
1

我想在項目Gradle中使用Dagger2和MVP,但不使用Android,使用本地Java。 但我無法構建我的項目,DaggerAppComponent類永遠不會生成。 這個類是由Dagger lib在編譯時自動生成的。使用Dagger2而不使用Android

的build.gradle:

plugins { 
    id "net.ltgt.apt" version "0.11" 
} 
apply plugin: 'java' 
apply plugin: 'idea' 

sourceCompatibility = 1.8 

repositories { 
    mavenCentral() 
} 

compileJava { 
    options.annotationProcessorPath = configurations.apt 
} 

configurations { 
    apt 
} 


dependencies { 
    testCompile group: 'junit', name: 'junit', version: '4.12' 

    compile "com.google.dagger:dagger:2.11" 
    apt  "com.google.dagger:dagger-compiler:2.11" 
    apt  "com.google.dagger:dagger-producers:2.11" 


    compileOnly "com.google.auto.factory:auto-factory:1.0-beta3" 
    apt   "com.google.auto.factory:auto-factory:1.0-beta3" 

    compileOnly "org.immutables:value:2.2.10:annotations" 
    apt   "org.immutables:value:2.2.10" 


    provided 'javax.annotation:jsr250-api:1.0' 
    compile 'org.glassfish:javax.annotation:10.0-b28' 

} 

Main.java

public class Main { 

private static AppComponent appComponent; 

    public static void main(String[] args) { 

     /** 
     * Launch the application. 
     */ 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 

       appComponent = initDagger(); 

       try { 
        MainViewImpl mainView = new MainViewImpl(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    public AppComponent getAppComponent() { 
     return appComponent; 
    } 

    public static AppComponent initDagger() { 
     return DaggerAppComponent.builder().appModule(new AppModule()) 
       .build(); 
    } 
} 

當我建立我的項目,我有這樣的錯誤:

Error:(38, 16) java: cannot find symbol 
    symbol: variable DaggerAppComponent 
    location: class main.Main 

類DaggerAppComponent永遠不會建立。 你有想法嗎?

+0

你有沒有''導入''班? – f1sh

+0

匕首編譯器依賴範圍不應該是「compileOnly」嗎?我甚至不確定'apt'類型適用於非android項目。 – yegodm

+0

哪些類? 問題是我無法生成類DaggeAppComponent。 認爲 –

回答

0

您需要按照IDE的說明的搖籃標註處理插件https://github.com/tbroyer/gradle-apt-plugin

註解像Dagger2和龍目島需要註釋處理器。這可以通過配置IDE來完成,但最好儘可能使用Gradle來處理。

這就是說,仍然有事情你必須做的Eclipse或IntelliJ。 的IntelliJ,這是重要的組成部分:

當IntelliJ IDEA的使用搖籃集成(而不是 IDA任務),建議委託IDE建設行動 搖籃本身出發與IDEA 2016.3: https://www.jetbrains.com/idea/whatsnew/#v2016-3-gradle否則, 你必須手動啓用註釋處理:在設置...→ 建立,執行,部署→編譯器→標註處理,檢查 啓用註釋處理並獲得項目 類路徑處理器。模仿搖籃行爲和生成的文件的行爲, 可以配置生產和測試源目錄 編譯/生成/源/公寓/主構建/生成/源/公寓/分別選擇測試 將生成的源相對於:模塊 內容根。

在啓動程序中的Project Defaults中進行配置,以便您只需執行一次。

請注意,從IntelliJ IDEA 2016開始。1,除非您將 構建操作委派給Gradle,否則您必須取消選中導入項目時,爲每個源集創建單獨的模塊 。

+2

我已啓用:註釋處理器中的模塊內容根,它的工作! 謝謝! –

0

我要說的是,這個代碼

compileJava { 
    options.annotationProcessorPath = configurations.apt 
} 

configurations { 
    apt 
} 

是沒有必要的。

您還必須激活IDE選項中的註釋處理。您可以通過運行gradle compile來檢查是否屬於您的情況,並檢查gradle是否生成源文件。

幾年前,我遇到過類似的問題,最後我終於解決了這個問題。你可以找到解決辦法here

+0

啓用註解處理並從項目類路徑中獲取處理器已在我的IDE中啓用。我有添加應用'插件:「net.ltgt.apt」'但沒有改變。謝謝 –