android - Dagger 2 构建 IllegalArgumentException compileDebugJavaWithJavac

标签 android illegalargumentexception dagger-2

我一直在测试 Dagger 2,一切正常,直到我做了一些重构。现在 gradle 抛出一个 IllegalArgumentException,我无法弄清楚我所做的更改现在导致了错误。我没有对 gradle 文件进行任何更改,这似乎是堆栈跟踪的首当其冲:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':mobile:compileDebugJavaWithJavac'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    ...

Caused by: java.lang.IllegalArgumentException
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:108)
    at dagger.internal.codegen.writer.ClassName.peerNamed(ClassName.java:130)
    at dagger.internal.codegen.SourceFiles.membersInjectorNameForMembersInjectionBinding(SourceFiles.java:266)
    at dagger.internal.codegen.InjectBindingRegistry.registerBinding(InjectBindingRegistry.java:194)
    at dagger.internal.codegen.InjectBindingRegistry.registerBinding(InjectBindingRegistry.java:171)
    at dagger.internal.codegen.InjectProcessingStep.process(InjectProcessingStep.java:129)
    at dagger.shaded.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:228)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
    at com.sun.tools.javac.main.Main.compile(Main.java:523)
    ... 89 more

Dagger 也没有生成任何文件,它们以前是。我一直在尝试所有我能找到的方法来解决这个问题,主要涉及修复 gradle 文件或清除构建文件夹,但到目前为止没有任何效果。


快速更新(因为我注意到一些赞成票);我从来没有发现我做错了什么,我最终恢复到旧版本。还原后,我再次进行了重构,效果很好。当我最初重构代码时,我一定做了一些不同的事情,但我不知道那是什么。

如果有人知道可能导致此问题的原因,我相信它会帮助其他已经或将来会遇到此问题的人。

最佳答案

我在将 Firebase 引入项目时遇到了这个问题。这是添加到项目中的第一个后台服务,因此我决定对一个什么都不做的服务进行一些调查。

这个构建:

public class HopefullyBuildsService extends IntentService {
    public HopefullyBuildsService(String name) {
         super(name);
    }

     @Override
     protected void onHandleIntent(Intent intent) {

     }
}

..............

@ApplicationScoped
@Component(modules = {ApplicationModule.class, RestModule.class})
public interface ApplicationComponent {
    ...
    void inject(HopefullyBuildsService service);
    ...
}

但这导致构建失败:

public class HopefullyBuildsService extends FirebaseMessagingService {
}

..............

@ApplicationScoped
@Component(modules = {ApplicationModule.class, RestModule.class})
public interface ApplicationComponent {
    ...
    void inject(HopefullyBuildsService service);
    ...
}

无论出于何种原因,尝试直接注入(inject) Firebase 派生服务都会导致构建以您描述的方式失败。然而,间接注入(inject)另一个类,然后在服务内部以老式方式实例化它,允许它再次构建。

public class FirebaseDaggerInjectHelper {

    @Inject
    PersistManager persistManager;

    @Inject
    RestClient restClient;

    @Inject
    OtherClasses stuffEtc;

    public FirebaseDaggerInjectHelper(MyApplication application){
        application.getApplicationComponent().inject(this);
   }

    //getters and setters n stuff
}

........

@ApplicationScoped
@Component(modules = {ApplicationModule.class, RestModule.class})
public interface ApplicationComponent {
    ...
    void inject(FirebaseDaggerInjectHelper helper);
    ...
}

........

public class HopefullyBuildsService extends FirebaseMessagingService {
    private FirebaseDaggerInjectHelper injectHelper;

    @Override
    public void onCreate() {
        super.onCreate();
        injectHelper = new FirebaseDaggerInjectHelper((MyApplication) getApplicationContext());
}

然后它构建得很好。不可否认,拥有这个中间人类很烦人,而且 firebase 派生服务必须以间接方式与注入(inject)的组件进行交互。但我不清楚为什么我不能注入(inject) Firebase 派生服务,或者 Firebase 有什么特别之处让 Dagger2 不高兴。

关于android - Dagger 2 构建 IllegalArgumentException compileDebugJavaWithJavac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35629856/

相关文章:

java - 对日期字段进行排序以获得最早的日期

JAVA EE 无状态 EJB IllegalArgumentException : Can not set field

android - Unresolved reference DaggerApplicationComponent

android - 解析 XML 文件时出现非法参数异常

android - Dagger2 : How no to duplicate Module-Component forActivity/Fragments, 依赖单个 Base(Module/Component) 作为 Base(Activity/Fragment) &

java - 具有相同依赖关系的 Dagger 2 多个组件

javascript - 有谁知道 "Uncaught ReferenceError: analytics is not defined "是什么意思以及为什么安装后没有应用程序用户?

android - 将接口(interface)放在 bundle 中以启动新 Activity

java - 给出错误的 AlertDialog 示例

android - 无法销毁 Activity : java. lang.IllegalArgumentException:找不到 fragment 的 id () View