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