Dagger 2 不在 Eclipse 上生成组件

Dagger 2 not generateing components on Eclipse

我已经使用 Eclipse 创建了一个 Java 应用程序,并且我正在使用 Maven 进行包管理。几天前,我能够配置我的应用程序以使用 Dagger 1(将依赖项添加到 pom 文件,启用注释处理并将 dagger、dagger-compile、javax 和 javawriter jar 添加到工厂路径)。经过与同事的多次讨论,我们决定使用 Dagger 2。我尝试按照 Dagger 2 documentation 将 Dagger 1 实现迁移到 Dagger 2,但没有成功。

由于某些无法解释的原因,未生成带有 Dagger 前缀的 @Component class。

因此我决定尝试 Dagger 2 Coffee sample

我创建了一个新的 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)并再次尝试,但我遇到了同样的错误。

我从 Dagger 1 中删除了 Factory Path jar,但结果还是一样。如果我尝试添加 Dagger 2 罐子,我会收到 Multiple problems have occurred window 以及以下错误文本 Errors occurred during the build. Errors running builder 'Java Builder' on project 'dagger'. com/google/common/collect/SetMultimap

我发现问题出现在我添加 dagger-compiler jar 时。

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

我试图找到 DaggerCoffee 文件,该文件应该是自动生成的,但我找不到。

如何将 Dagger 2 与 Eclipse 一起使用?我多次修改文档并花了一天时间研究这个,但到目前为止运气不好。

所以经过大量的试验和错误,我终于设法在 Eclipse 中配置 Dagger 2。我去了 Project => Properties => Java Compiler => Annotation Processing => Factory Path 并为 daggerdagger-compilerdagger-producers、[=13= 添加了 jars ] 和 guava-18.0guava-18.0 jar 是棘手的部分。我有另一个使用旧版本 guava-14.0.1 的依赖项,它首先被添加到 pom.xml 文件中。这导致旧版本的 guava 下载到我的 Maven 依赖项中,但它不适用于 Dagger 2。

所以这个故事的寓意是你应该经常检查依赖版本。

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

  • 安装 m2e-apt
  • Window -> 首选项 -> Maven -> 注释处理: Select"Automatically configure JDT APT"
  • 更新maven项目

除了 Jotschi 所说的之外,我还需要将以下内容添加到我的 pom.xml 中。注意需要设置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>

我还发现让 dagger v2.8 在 Eclipse 4.6.1 (Neon) 和 JDK 1.7 中工作有点挑战。安装 m2e-apt 并在 "Window -> Preferences -> Maven -> Annotation Processing" 和 "project/Properties -> Maven -> Annotation Processing" 中启用注释处理后,我仍然需要将插件文本添加到我的 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>