2017-09-06 6 views
1

Dagger2 및 MVP를 프로젝트 거치대에서 사용하지만 Android가 없으면 기본 Java로 사용하고 싶습니다. 하지만 프로젝트를 만들 수 없으며 클래스 DaggerAppComponent가 생성되지 않습니다. 이 클래스는 컴파일 타임에 Dagger lib에 의해 자동 생성됩니다.Android없이 Dagger2 사용

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' 유형이 비 안드로이드 프로젝트에 적합하다는 것을 확신하지 못한다. – yegodm

+0

어떤 클래스입니까? 문제는 DaggeAppComponent 클래스를 생성 할 수 없다는 것입니다. 생각해보기 –

답변

0

을 찾을 수 있습니다. 이것은 IDE를 구성하여 수행 할 수 있지만 가능한 한 많이 gradle로 처리하는 것이 가장 좋습니다.

Eclipse 또는 IntelliJ에서해야 할 일이 남아 있다고합니다. IntelliJ에 대한 , 이것은 중요한 부분입니다 :

(오히려 IDA 작업보다)하게 IntelliJ IDEA에서 Gradle을 통합을 사용하는 경우, 그것이 IDE가 IDEA 2016.3로 시작 Gradle을 자체에 대한 작업을 구축 위임하는 것이 좋습니다

: https://www.jetbrains.com/idea/whatsnew/#v2016-3-gradle 그렇지 않으면, 수동으로 주석 처리를 활성화해야합니다 : 설정에서 ... → 빌드, 실행, 배포 → 컴파일러 → 주석 프로세서, 을 확인 주석 처리를 활성화하고 프로젝트 클래스 경로에서 프로세서를 얻습니다. 당신이 빌드로 생산 및 테스트 소스 디렉토리를 구성 할 수 Gradle을 행동과 생성 된 파일 동작, 을 모방/생성/소스/아파트/주빌드/생성/소스/아파트/테스트 각각 선택에 생성 된 소스는 모듈 콘텐츠 루트를 기준으로 저장합니다.

Launcher의 Project Defaults에서 한 번만 수행하면됩니다.

IntelliJ IDEA 2016부터 시작합니다.1이고 작업을 Gradle에 위임하지 않으면 프로젝트을 가져올 때 소스마다 별도 모듈 만들기 을 선택 취소해야합니다.

+2

주석 처리기에 모듈 콘텐츠 루트가 활성화되었습니다. 감사합니다 !!! –

0

는이 코드

compileJava { 
    options.annotationProcessorPath = configurations.apt 
} 

configurations { 
    apt 
} 

이 필요하지 않다고 말할 것입니다.

또한 IDE 옵션에서 주석 처리를 활성화해야합니다. 0이 아닌지 확인하고 gradle이 소스를 생성하는지 확인하십시오.

나는 몇 년 전에 비슷한 문제가있어서 마침내 해결했습니다. 당신은 해결책 당신은 Dagger2와 롬복 같은 https://github.com/tbroyer/gradle-apt-plugin

주석이 주석 프로세서를 필요로하는 Gradle을 주석 처리 플러그인에 대한 IDE 지침을 따라야합니다 here

+0

내 IDE에서 주석 처리 사용 및 프로젝트 클래스 경로의 프로세서 가져 오기가 이미 활성화되어 있습니다. 나는'plugin : net.ltgt.apt "를 적용했지만 아무 변화도 없다. 감사합니다. –

관련 문제