ошибка: дублировать класс при компиляции Java-проекта с Gradle, содержащим источники, созданные кинжалом - PullRequest
0 голосов
/ 20 июня 2019

Я строю Java-проект, используя Gradle для сборки проекта и Dagger2 в качестве инжектора зависимостей.И я получаю эту ошибку:

<path to the class>/MyModule_SourceConnectionDTOFactory.java:12: error: duplicate class: <package>.MyModule_SourceConnectionDTOFactory
public final class MyModule_SourceConnectionDTOFactory implements Factory<ConnectionDTO> {
             ^
<path to the class>/MyModule_DestinationConnectionDTOFactory.java:12: error: duplicate class: <package>.MyModule_DestinationConnectionDTOFactory
public final class MyModule_DestinationConnectionDTOFactory
             ^

Java версия 1.8 Gradle версия: 5.4.1 (также пробовал с 4.5.1)

Зависимости кинжала:

dependencies {
    annotationProcessor 'com.google.dagger:dagger-compiler:2.17'

    compile 'com.google.dagger:dagger:2.17'
    ...
}

Модуль класса:

@Module
public class MyModule {
    private final MyConfiguration config;

    @Inject
    public MetaStoreModule(MyConfiguration config){
        this.config = config;
    }

    @Provides
    @Singleton
    @Named("sourceConnection")
    public ConnectionDTO sourceConnectionDTO() {
        return new ConnectionDTO(config.sourceHost(), config.sourceUser(),
                config.sourcePassword(), config.sourceDataBaseName());
    }

    @Provides
    @Singleton
    @Named("destinationConnection")
    public ConnectionDTO destinationConnectionDTO() {
        return new ConnectionDTO(config.destinationHost(), config.destinationUser(),
                config.destinationPassword(), config.destinationDataBaseName());
    }
}

Класс компонента:

import dagger.Component;

import javax.inject.Singleton;

@Singleton
@Component(modules = MyModule.class)
public interface MyComponent{
    @Named("sourceConnection")
    ConnectionDTO sourceConnectionDTO();
    @Named("destinationConnection")
    ConnectionDTO destinationConnectionDTO();
}

Если у меня есть только один компонент, аннотированный этим именем, не уверен, почему он находит дубликат класса

1 Ответ

0 голосов
/ 25 июня 2019

Я нашел проблему, кажется, что этот плагин для идеи:

    apply plugin: "idea"
    sourceSets.main.java.srcDir new File("src", 'main/generated')
    sourceSets.test.java.srcDir new File("src", 'test/generated_tests')
    idea {
        module {
            // Marks the already(!) added srcDir as "generated"
            generatedSourceDirs += file('src/main/generated')
            generatedSourceDirs += file('src/test/generated_tests')
        }
    }

Вызывал ошибку.Удалил его и исправил проблему, но до сих пор не уверен, почему это происходит, когда он работает в других проектах с той же версией Gradle.

...