2015-10-07 3 views
4

Я новичок в кинжале 2 и пробовал пример кофе-кинжала 2 в IntelliJ, и кажется, что это не создает DaggerCoffeeApp_Coffee (он должен генерировать его), хотя я внимательно следил за примером кода для кинжала 2 в github.Кинжал 2 Компонент, не создающий Кинжал Префикс Классы для строительства

Public class CoffeeApp { 
    @Singleton 
    @Component(modules = {DripCoffeeModule.class}) 
    public interface Coffee { 

     CoffeeMaker maker(); 
    } 
    public static void main(String args[]){ 


     Coffee coffee = DaggerCoffeeApp_Coffee.builder().build(); 
    } 
} 

Это мой файл pom.xml.

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.tim.test</groupId> 
    <artifactId>Dagger2Experiment</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <properties> 
     <slf4j-api.version>1.7.12</slf4j-api.version> 
    </properties> 
    <repositories> 
     <repository> 
      <id>sonatype</id> 
      <name>sonatype-repo</name> 
      <url>https://oss.sonatype.org/content/repositories/snapshots/</url> 
     </repository> 
    </repositories> 
    <dependencies> 

     <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> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>${slf4j-api.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>${slf4j-api.version}</version> 
      <scope>runtime</scope> 
     </dependency> 
    </dependencies> 

</project> 

Я пробовал различные решения от темы ниже, но ничего не похоже на работу:

Я также добавил файл банка с моим приложением buildpath кинжала-2.0.1.jar во время выполнения вашего приложения и dagger- компилятор-2.0.1.jar в вашей сборке во время компиляции.

Update Я использовал DaggerCoffeeApp_Coffee.builder(). Построения() во фрагменте кода выше, так как я отредактировал мой код, чтобы следовать примеру кода в GitHub Dagger 2'S ниже после того, как я не мог найти конструктор. Ссылка ниже:

https://github.com/google/dagger/blob/master/examples/simple/src/main/java/coffee/CoffeeApp.java

Любая помощь будет принята с благодарностью.

+1

несбалансированные брекеты на основном()? –

+0

oops спасибо за указание этого. Я отредактирую его, так как это была ошибка копирования и вставки. Скобки верны в моем коде :) – t22000

+0

Не пытайтесь объявить 'dagger-compiler' как необязательный. У меня были проблемы с использованием gradle 'provided' для' dagger-compiler' в android и установка его 'compile' исправила его. –

ответ

1

Обновление Да, вы поймали меня, снимая вопрос. Я не смог прочитать ваш пример кода, иначе я бы увидел, что pom.xml не единственная проблема.

  1. Я предполагаю, что ваш DripCoffeeModule правильно аннотированный и не имеет параметров в его конструктор, так что вам не нужно указать это в создании компонента. Например. :

    @Module 
    
    public DripCoffeeModule { 
    
    //Uses default constructor 
    
    } 
    
  2. Я не видел компонент реализован как внутренний класс и раньше, но я держу пари, что Dagger не будет относиться к этому по-другому с точки зрения инстанцировании. (Я бы рекомендовал переместить его из класса CoffeeApp.) Именование, однако, было бы неверным. Вместо

    DaggerCoffeeApp_Coffee.builder().build(); 
    

Вы должны следовать соглашению об именовании, определенный Dagger. В разделе под названием Построение графа на сайте кинжала:

Реализация имеет такое же имя, что и интерфейс с приставкой Dagger.

Таким образом, вы должны изменить строку:

DaggerCoffee.builder().build(); 

или вы можете использовать удобный метод:

DaggerCoffee.create(); 

Если я неправ номер 1, то вам нужно будет для создания вашего модуля так же:

DaggerCoffee.builder().dripCoffeeModule(new DripCoffeeModule()).build(); 

Оригинал

Переместить компилятор из секции зависимостей в раздел компилятора. С официального сайта Dagger 2.

В проекте Maven, один будет включать время выполнения в разделе зависимостей вашего pom.xml и артефакт Кинжал-компилятор в качестве зависимости плагина компилятора:

Например :

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <dependencies> 
       <dependency> 
        <groupId>com.google.dagger</groupId> 
        <artifactId>dagger-compiler</artifactId> 
        <version>2.0</version> 
        <optional>true</optional> 
       </dependency> 
      </dependencies> 
     </plugin> 
+0

Я переместил его, и он не сработал к сожалению :( – t22000

+0

Спасибо, что нашли время посмотрите, что вы предложили, и не было конструктора DaggerCoffee. Интересно, что я посмотрел на github-код Dagger 2 и внес соответствующие изменения. Вы можете увидеть DaggerCoffeeApp_Coffee.builder(). build() ниже : https://github.com/google/dagger/blob/master/examples/simple/src/main/java/coffee/CoffeeApp.java – t22000

+0

Я обновлю свое сообщение, чтобы предоставить ему больше контекста. :) – t22000

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