Классы, созданные с помощью Maven и Dagger, не видны ADT в Eclipse

#java #android #eclipse #maven #dagger

#java #Android #eclipse #maven #dagger

Вопрос:

Я создал проект с добавлением Dagger в classpath, со всеми этими соединителями M2E и т. Д. В моем pom.xml У меня есть

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>com.squareup.dagger</groupId>
                    <artifactId>dagger</artifactId>
                    <version>1.2.1</version>
                </dependency>
                <dependency>
                    <groupId>com.squareup.dagger</groupId>
                    <artifactId>dagger-compiler</artifactId>
                    <version>1.2.1</version>
                    <optional>true</optional>
                </dependency>
                <dependency>
                    <groupId>com.jakewharton</groupId>
                    <artifactId>butterknife</artifactId>
                    <version>5.1.0</version>
                </dependency>
            </dependencies>
        </plugin>
 

Все также добавляется в настройки проекта Eclipse, поэтому, когда я что-то меняю в своем модуле Dagger, это автоматически отражается в сгенерированных файлах Java в разделе

 target/generated-sources/annotations
 

Эта папка также прикреплена к проекту в качестве исходной папки.

Пока все хорошо, когда я запускаю приложение через ADT на эмуляторе, я вижу исключение, в котором говорится

 06-21 09:51:17.983: E/AndroidRuntime(1207):
java.lang.RuntimeException: Unable to create application XXX:
java.lang.IllegalStateException: Module adapter for class XXX could not be loaded.
Please ensure that code generation was run for this module.
 

Насколько я понимаю, это означает, что папка «target / generated-sources / annotations» не видна для ADT, когда он пытается скомпилировать проект.

В настоящее время у меня есть 2 идеи:

  • Добавьте эту папку в путь к классу ADT
  • Сгенерируйте файлы в стандартные папки Android, чтобы ADT мог их видеть

К сожалению, я не нашел, как сделать ни то, ни другое. Документация Dagger также слишком коротка и неясна по этой теме.

Итак, как это обычно работает в Eclipse, когда вы используете Maven и Dagger?

ОБНОВЛЕНИЕ: я выполнил все шаги из вопроса «возможный дубликат» выше, но моя проблема не решена. Я повторю это еще раз: файлы создаются во время сборки, по какой-то причине они просто не видны эмулятору.

Комментарии:

1. Я думаю, что это не дубликат, потому что в этом другом вопросе у задавшего вопрос человека отсутствовала библиотека JavaWriter. У меня определенно есть это в classpath, потому что файлы генерируются успешно. Если бы у меня его не было, файлы вообще не создавались бы.

Ответ №1:

Если кто-то столкнется с той же проблемой, вот как я ее решил. Я добавил следующие строки в pom.xml:

 <build>
    <outputDirectory>bin/classes</outputDirectory>
...
 

Это означает, что все обычные вещи продолжают поступать в «целевую» папку, как обычно, во время сборки, но все классы из всех исходных папок отправляются в «bin / classes». Это должно быть установлено для корректной работы ADT. Я не знаю, может ли ADT работать с любой другой папкой для классов, но по умолчанию это невозможно. Теперь вы можете щелкнуть правой кнопкой мыши проект и выбрать «Maven / Обновить проект …», чтобы установить для всех выходных папок значение «bin / classes». Это устраняет проблему, ADT правильно запускает приложение на эмуляторе со всеми необходимыми классами.