Dagger 2 не генерирует компоненты в Eclipse

Я создал приложение Java с Eclipse и использую Maven для управления пакетами. Несколько дней назад мне удалось настроить свое приложение для работы с Dagger 1 (добавление зависимостей в файл pom, включение обработки аннотаций и добавление jar-файлов dagger, dagger-compile, javax и javawriter в Factory Path). После нескольких обсуждений с моими коллегами мы решили использовать Dagger 2. Я попытался перенести реализацию Dagger 1 на Dagger 2, выполнив документацию Dagger 2, но это не сработало.

По какой-то необъяснимой причине класс @Component с префиксом Dagger не создается.

Из-за этого я решил попробовать Dagger 2 Coffee. образец.

Я создал новый проект Eclipse Java, преобразовал его в Maven, добавил образец кода и зависимости Dagger 2 в файл pom:

 <dependency>
    <groupId>com.google.dagger</groupId>
    <artifactId>dagger</artifactId>
    <version>2.0.1</version>
  </dependency>
  <dependency>
    <groupId>com.google.dagger</groupId>
    <artifactId>dagger-compiler</artifactId>
    <version>2.0.1</version>
    <optional>true</optional>
  </dependency>

Моя сборка завершилась со следующей ошибкой:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    DaggerCoffeeApp_Coffee cannot be resolved

Я извлек интерфейс компонента Coffee в отдельный файл (с именем Coffee.java) и попытался снова, но получил ту же ошибку.

Я удалил банки Factory Path из Dagger 1, но результат остался прежним. Если я попытаюсь добавить банки Dagger 2, я получу окно Произошло несколько проблем со следующим текстом ошибки Errors occurred during the build. Errors running builder 'Java Builder' on project 'dagger'. com/google/common/collect/SetMultimap

Я обнаружил, что проблема возникает, когда я добавляю банку dagger-compiler.

Если я удалю каждую банку из Factory Path, сборка все равно завершится ошибкой.

Я пытался найти файл DaggerCoffee, который должен быть сгенерирован автоматически, но не смог его найти.

Как я могу использовать Dagger 2 с Eclipse? Я несколько раз просматривал документацию и потратил день на ее изучение, но пока безуспешно.


person Ivan Stoyanov    schedule 27.07.2015    source источник


Ответы (4)


Он также работает с использованием m2e-apt. Нет необходимости добавлять пользовательские библиотеки:

  • Установить m2e-apt
  • Окно -> Настройки -> Maven -> Обработка аннотаций: выберите «Автоматически настроить JDT APT».
  • Обновите проект maven
person Jotschi    schedule 02.03.2016

Итак, после множества проб и ошибок мне наконец удалось настроить Dagger 2 в Eclipse. Я перешел в «Проект» => «Свойства» => «Компилятор Java» => «Обработка аннотаций» => «Заводской путь» и добавил банки для dagger, dagger-compiler, dagger-producers, javax.inject-1 и guava-18.0. Баночка guava-18.0 — сложная часть. У меня была другая зависимость, которая использовала более старую версию guava-14.0.1, и она была сначала добавлена ​​в файл pom.xml. Это привело к тому, что старая версия guava была загружена в мои зависимости maven, но она не работала с Dagger 2.

Итак, мораль этой истории в том, что вы всегда должны проверять версии зависимостей.

person Ivan Stoyanov    schedule 28.07.2015
comment
Мне также пришлось включить обработку аннотаций в компиляторе Java -> Обработка аннотаций - person Jotschi; 02.03.2016

В дополнение к тому, что сказал Йочи, мне также нужно было добавить следующее в мой pom. Обратите внимание, что необходимо установить номер версии JDK, так как по умолчанию Maven использует версию 1.5, а генерация кода аннотаций была добавлена ​​в версии 1.6:

<plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>com.google.dagger</groupId>
                    <artifactId>dagger-compiler</artifactId>
                    <version>2.0.2</version>
                    <optional>true</optional>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
person Roger H.    schedule 06.03.2016
comment
Я попробовал это и столкнулся с множеством проблем, одна из которых заключалась в том, что я пропускал версию. Вам нужно указать версию, иначе eclipse не сможет сопоставить конфигурацию для m2e. Кроме того, у меня было меньше проблем при использовании Eclipse Neon вместо Mars. - person Jotschi; 24.08.2016

Я также обнаружил, что заставить dagger v2.8 работать в Eclipse 4.6.1 (Neon) с JDK 1.7 довольно сложно. После установки m2e-apt и включения обработки аннотаций как в «Окно -> Настройки -> Maven -> Обработка аннотаций», так и в «проект/Свойства -> Maven -> Обработка аннотаций» мне все равно пришлось добавить текст плагинов в мой pom. xml-файл. Вот фрагмент файла POM, который у меня работал:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>com.google.dagger</groupId>
                    <artifactId>dagger-compiler</artifactId>
                    <version>2.8</version>
                    <optional>true</optional>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>  
  </build>

  <dependencies>
    <dependency>
      <groupId>com.google.dagger</groupId>
      <artifactId>dagger</artifactId>
      <version>2.8</version>
    </dependency>
  </dependencies>
person Rich C.    schedule 06.02.2017