Кинжал 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 недовольным.