Java Dagger 2未在Eclipse上生成组件

Java Dagger 2未在Eclipse上生成组件,java,eclipse,maven,dependency-injection,dagger-2,Java,Eclipse,Maven,Dependency Injection,Dagger 2,我已经用Eclipse创建了一个Java应用程序,并使用Maven进行包管理。几天前,我能够将我的应用程序配置为使用Dagger 1(将依赖项添加到pom文件,启用注释处理,并将Dagger、Dagger compile、javax和javawriter JAR添加到工厂路径)。在与我的同事讨论了几次之后,我们决定使用匕首2。我试图通过以下方法将Dagger1实现迁移到Dagger2,但没有成功 由于某些无法解释的原因,未生成带有匕首前缀的@组件类 正因为如此,我决定试试这个 我创建了一个新的E

我已经用Eclipse创建了一个Java应用程序,并使用Maven进行包管理。几天前,我能够将我的应用程序配置为使用Dagger 1(将依赖项添加到pom文件,启用注释处理,并将Dagger、Dagger compile、javax和javawriter JAR添加到工厂路径)。在与我的同事讨论了几次之后,我们决定使用匕首2。我试图通过以下方法将Dagger1实现迁移到Dagger2,但没有成功

由于某些无法解释的原因,未生成带有
匕首
前缀的
@组件

正因为如此,我决定试试这个

我创建了一个新的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>
我将
Coffee
组件接口提取到一个单独的文件(名为
Coffee.java
)中,然后重试,但得到了相同的错误

我从匕首1中移除了工厂路径罐,但结果还是一样。如果我尝试添加Dagger 2罐子,我会看到出现多个问题的窗口,错误文本如下 生成过程中发生错误。 在项目“dagger”上运行生成器“Java builder”时出错。 com/google/common/collect/SetMultimap

当我添加
dagger编译器
jar时,我发现问题出现了

如果我从工厂路径中删除每个jar,构建仍然会失败

我试图找到应该自动生成的
daggerOffee
文件,但找不到它


如何在Eclipse中使用匕首2?我多次修改文档并花了一天的时间对此进行研究,但到目前为止运气不佳。

因此,经过大量的尝试和错误,我终于成功地在Eclipse中配置了Dagger 2。我去了Project=>Properties=>Java编译器=>Annotation Processing=>Factory Path,为
dagger
dagger编译器
dagger生成器
javax.inject-1
guava-18.0
添加了JAR。
guava-18.0
jar是个棘手的部分。我还有一个依赖项,它使用了较旧版本的
guava-14.0.1
,它首先被添加到
pom.xml
文件中。这导致了较旧版本的
guava
下载到我的maven dependencies中,但它不适用于Dagger 2


因此,这个故事的寓意是,您应该始终检查依赖版本。

它也可以使用m2e-apt工作。无需添加自定义LIB:

  • 安装m2e apt
  • 窗口->首选项->Maven->注释处理: 选择“自动配置JDT APT”
  • 更新maven项目

    • 除了Jotschi所说的,我还需要在我的pom中添加以下内容。注意,需要设置JDK版本号,因为Maven使用的默认版本是v1.5,并且在v1.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>
      
      
      org.apache.maven.plugins
      maven编译器插件
      2.4
      1.8
      1.8
      dagger.com.google.dagger
      匕首编译器
      2.0.2
      真的
      
      我还发现,让DaggerV2.8在Eclipse 4.6.1(Neon)和JDK1.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>
      
      
      org.apache.maven.plugins
      maven编译器插件
      2.4
      1.7
      1.7
      dagger.com.google.dagger
      匕首编译器
      2.8
      真的
      dagger.com.google.dagger
      匕首
      2.8
      
      我还必须在“Java编译器”->“注释处理”中启用注释处理。我尝试了这个方法,但遇到了很多问题,其中之一就是我忽略了版本。您需要指定版本,否则eclipse将无法映射m2e的配置。此外,我在使用EclipseNeon而不是Mars时遇到的问题更少。
      <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>