【问题标题】:error: duplicate class while compiling java project with Gradle containing dagger generated sources错误:使用包含匕首生成源的 Gradle 编译 Java 项目时出现重复的类
【发布时间】:2019-06-20 09:41:31
【问题描述】:

我正在使用 Gradle 构建项目并使用 Dagger2 作为依赖注入器来构建 Java 项目。我收到了这个错误:

<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)

Dagger 依赖项:

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();
}

如果我只有一个用该名称注释的组件,不知道为什么它会找到重复的类

【问题讨论】:

  • Dagger 目前在2.23.2,你可能想尝试升级版本。
  • 我不能因为项目依赖于库和其他公司政策...... :(

标签: java gradle dagger-2


【解决方案1】:

我发现了这个问题,似乎这个插件的想法:

    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 版本的其他项目中工作时会导致它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多