2014-12-09 5 views
1

Я использую RoboGuice 3.0 alpha-2, делаю это довольно долгое время, и я доволен этим. Теперь я хотел перейти на RoboGuice-3.0 или -3.01, но я не могу работать.RoboGuice, RoboBlender и Eclipse

Я использую Eclipse (я использую Android Studio в каком-то проекте, но мне это действительно не нравится), RoboBlender жалуется на AnnotationDatabaseImpl, не будучи там. Когда я отключить Roboblender, я получаю

E/AndroidRuntime(18825): FATAL EXCEPTION: main 
E/AndroidRuntime(18825): java.lang.NoClassDefFoundError: com.google.inject.internal.util.$Maps 
E/AndroidRuntime(18825): at com.google.inject.assistedinject.BindingCollector.<init>(BindingCollector.java:34) 
E/AndroidRuntime(18825): at com.google.inject.assistedinject.FactoryModuleBuilder.<init>(FactoryModuleBuilder.java:206) 
E/AndroidRuntime(18825): at com.loqli.android.robo.GossipModule.configure(GossipModule.java:260) 
E/AndroidRuntime(18825): at com.google.inject.AbstractModule.configure(AbstractModule.java:78) 
E/AndroidRuntime(18825): at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:252) 
E/AndroidRuntime(18825): at com.google.inject.spi.Elements.getElements(Elements.java:107) 
E/AndroidRuntime(18825): at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:135) 
E/AndroidRuntime(18825): at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104) 
E/AndroidRuntime(18825): at com.google.inject.Guice.createInjector(Guice.java:100) 
E/AndroidRuntime(18825): at com.google.inject.Guice.createInjector(Guice.java:87) 
E/AndroidRuntime(18825): at roboguice.RoboGuice.createGuiceInjector(RoboGuice.java:186) 
E/AndroidRuntime(18825): at roboguice.RoboGuice.getOrCreateBaseApplicationInjector(RoboGuice.java:151) 
E/AndroidRuntime(18825): at roboguice.RoboGuice.getOrCreateBaseApplicationInjector(RoboGuice.java:90) 

я вернулся в альфа-2, но теперь мне интересно, если RG и RB работы с Eclipse, и муравей?

Редактировать: Я упомянул «Затмение». Мне не интересно, как это работает в Android Studio, я хочу знать, как заставить его работать в Eclipse.

ответ

0

Правильный путь в затмение будет set RoboBlender up as annotation processor , Однако это не помогло, но (см. Ниже).

Maven - рабочий раствор

Вот как я получил это работает - с помощью Maven. Maven генерирует базу данных аннотаций до target\generated-sources\annotations. Поэтому я просто добавил этот путь в качестве исходной папки в eclipse и voilà не более java.lang.ClassNotFoundException: AnnotationDatabaseImpl!

Ant - похожее решение?

С вашего вопроса, я полагаю, вы используете муравей ?! Может быть, вы можете set up the annotation processing with ant вместо maven?

Eclipse, процессор аннотаций - дополнительный подход

Как уже упоминалось, я первый попытался использовать затмение процессор аннотаций и почти получил это работает. Я добавил RoboBlender and its transitive dependencies к заводскому пути. Для RoboBlender 3.0.1 это

  1. RoboBlender, его зависимость
  2. velocity и его зависимости
  3. commons-collections и
  4. commons-lang.

Поскольку я использую несколько модулей с базами данных аннотаций, добавляю опцию процессора guiceAnnotationDatabasePackageName.

В результате появилось информационное сообщение в моем журнале ошибок eclipse, в котором говорилось Impossible to generate annotation database., что является именно сообщением generic exception thrown by the RoboGuice's AnnotationDatabaseGenerator. EclipseErrorLog К сожалению, нет никаких стеков и т. Д., Поэтому я отказался от этого решения и нашел решение с помощью maven, как указано выше. Может быть, кто-то еще может найти недостающую часть здесь?
Если это поможет вам найти проект, где я использую RoboBlender here.

0

Класс AnnotationDatabaseImpl генерируется RoboBlender во время компиляции.

Вы можете указать следующее в качестве аргумента Java Compiler (используйте имя пакета)

-AguiceAnnotationDatabasePackageName=some.package.name.here 

Это должно генерировать класс вам нужно во время компиляции.

Тогда в манифесте необходимо указать тот же пакет

<meta-data android:name="roboguice.annotations.packages" android:value="some.package.name.here"/> 

Для справки настройки Maven ответ здесь:

Injected objects became null after upgrading to Roboguice 3

+0

Ah. Я сделал это в манифесте, но не в собственности. Я попробую. – Christine

+0

Но, наверное, мне придется переключиться на Android Studio рано или поздно, к сожалению ... – Christine

+0

Я добавил аргумент компилятора java, у меня уже была линия метаданных в моем манифесте, но она все равно не будет генерировать AnnotationDatabaseImpl файл. – Christine

Смежные вопросы