Кинжал 2 Build IllegalArgumentException compileDebugJavaWithJavac

Я тестировал кинжал 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

Никакие файлы не создаются кинжалом, и они были ранее. Я пытаюсь каждый метод исправить это, что я могу найти, в основном с помощью исправления файлов gradle или очистки папки сборки, но до сих пор ничего не работало.


Быстрое обновление (так как я заметил несколько голосов); Я никогда не узнал, что я сделал не так, я вернулся к старой сборке. После возврата я снова сделал рефакторинг, и он работал нормально. Я, должно быть, сделал что-то другое, когда я изначально реорганизовал код, но я понятия не имею, что это было.

Если у кого-то есть представление о том, что могло бы вызвать это, я уверен, что это поможет кому-то еще, кто имеет или будет в будущем сталкиваться с этой проблемой.

Ответ 1

Я столкнулся с этой проблемой, введя 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);
    ...
}

По какой-либо причине попытка непосредственного встраивания в производную службу Firebase приводит к сбою сборки в том, как вы описали. Однако косвенно впрыскивание в другой класс, а затем создание его старомодным способом внутри службы позволило ему снова построить.

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, или что особенное в Firebase, которое сделало Dagger2 недовольным.