2015-04-08 2 views
21

Im используя кинжал 2, так как в то время, но сегодня пытаться компилировать получил эту ошибку:Dagger2 не создает файлы «Dagger_»

Error:(13, 31) error: cannot find symbol class Dagger_GlobalComponent

Error:(38, 21) error: cannot find symbol variable Dagger_GlobalComponent

Так вот код:

public class MyAppApplication extends Application { 

private static GlobalComponent component; 

@Override 
public void onCreate() { 
    super.onCreate(); 

    component = Dagger_GlobalComponent.builder() 
      .busModule(new BusModule()) 
      .syncModule(new SyncModule()) 
      .serviceModule(new ServiceModule()) 
      .contextModule(new ContextModule(this)) 
      .persistenceModule(new PersistenceModule(this)) 
      .build(); 
}} 

И Gradle Зависимости:

... 
compile 'com.google.dagger:dagger:2.0-SNAPSHOT' 
apt 'com.google.dagger:dagger-compiler:2.0-SNAPSHOT' 
provided 'org.glassfish:javax.annotation:10.0-b28' 
... 

Любые решения? Уже пытался: очистить, перестроить, изменить версии dependecy, также удалить кеш Gradle и переустановить Android Studio.

Если это помогает также получил ту же ошибку с этой выборки проектов:

https://github.com/gk5885/dagger-android-sample

https://github.com/mgrzechocinski/dagger2-example

+0

квадратные разработчики просто удалили подчеркивание, вы можете использовать его как этот DaggerYourComponent после компиляции, конечно, –

ответ

10

Dagger 2 теперь был освобожден, так что вам нужно изменить Gradle зависимости:

compile 'com.google.dagger:dagger:2.0' 
provided 'com.google.dagger:dagger-compiler:2.0' 
provided 'org.glassfish:javax.annotation:10.0-b28' 
35

Я пытался выполнить руководство Dagger2 по tutsplus here и столкнулся с той же проблемой при попытке использовать синтаксис подчеркивания (Dagger_ClassnameComponent).

Как утверждают другие, новые API-интерфейсы Dagger не используют этот синтаксис подчеркивания, а скорее используют синтаксис DaggerClassnameComponent. Однако при попытке использовать новый синтаксис в моем простом приложении класс DaggerClassnameComponent не найден. Я считаю, что он должен находиться в папке app/build/generated/source/apt/debug/packagename/component.

Сначала у меня не было файлов, сгенерированных в указанной папке. Тем не менее, мое решение состояло в том, чтобы очистить и построить проект,, а затем я мог бы использовать класс Component, как и ожидалось.

+7

+1 Это работало для меня, когда я думал, что плагин 'apt' gradle сгенерировал бы его. Однако, по-видимому, ему нужно как минимум построить один раз. – pjco

+2

@ halfjew22 - Спасибо за решение. Информация pjco также помогла мне. Если бы вы успешно создали проект, прежде чем вы сможете ссылаться на DaggerClassnameComponent, в противном случае он не будет генерировать сгенерированные/source/apt/files – hadez30