我最近一直在使用Dagger 2,只是在我的android项目中使用范围做了一些工作,为活动增加了范围。虽然一切都在我自己的机器上运行,构建和测试。我在Jenkins CI上遇到编译错误。
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':Adverts:compile***DebugJava'
.java.lang.ClassCastException: java.lang.String cannot be cast to javax.lang.model.type.TypeMirror
这很奇怪,因为直到现在,使用Dagger 2构建的工作正常,只需生成较少的代码。当我导航到生成的源时,一些但不是所有代码都生成了。看起来它正在沿途的某个地方扯下来。 CI和我的机器都使用相同版本的JDK。
有没有人遇到CI& amp;匕首2之前?
答案 0 :(得分:2)
对于将来遇到此错误的人,很可能是因为您删除了一个类,或者您的模块中引用了一个不存在的类。
当我有这样的代码编译时,我有完全相同的错误:
@Module(includes = {
AModuleThatDoesntExist.class
})
public class YourModule {
}
所以我所说的是:如果你遇到这个错误,请检查你的Dagger模块和bootstrapper代码,那里可能有一些无效的代码。
至于为什么它在您的机器上运行而不在CI服务器上运行:我不知道。我猜这是因为一些缓存问题,你删除的.java文件的.class文件仍然存在于你的本地文件系统上,所以Dapper可以找到它,但它在CI服务器上不存在。如果您仍然可以重现该问题,也许您可以尝试运行“重建”并查看错误是否也在本地发生。
答案 1 :(得分:0)
无论发生什么,Dagger 2的注释处理器都不应该抛出异常,所以假设它来自Dagger 2注释处理器,如果你可以创建一个可重现的例子,最好是简单的之一。
正如其他人建议做一个干净的构建(自己删除这些类以确保它们都已消失)并检查您的机器和CI之间的差异。