error: duplicate class while compiling java project with Gradle containing dagger generated sources
error: duplicate class while compiling java project with Gradle containing dagger generated sources
我正在构建一个 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)
Dagger 依赖项:
dependencies {
annotationProcessor 'com.google.dagger:dagger-compiler:2.17'
compile 'com.google.dagger:dagger:2.17'
...
}
模块 Class:
@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());
}
}
组件class:
import dagger.Component;
import javax.inject.Singleton;
@Singleton
@Component(modules = MyModule.class)
public interface MyComponent{
@Named("sourceConnection")
ConnectionDTO sourceConnectionDTO();
@Named("destinationConnection")
ConnectionDTO destinationConnectionDTO();
}
如果我只有一个组件用那个名称注释,不知道为什么它会找到重复的 class
我发现了问题,似乎是这个插件的想法:
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 版本的其他项目中工作时会导致它。
我正在构建一个 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)
Dagger 依赖项:
dependencies {
annotationProcessor 'com.google.dagger:dagger-compiler:2.17'
compile 'com.google.dagger:dagger:2.17'
...
}
模块 Class:
@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());
}
}
组件class:
import dagger.Component;
import javax.inject.Singleton;
@Singleton
@Component(modules = MyModule.class)
public interface MyComponent{
@Named("sourceConnection")
ConnectionDTO sourceConnectionDTO();
@Named("destinationConnection")
ConnectionDTO destinationConnectionDTO();
}
如果我只有一个组件用那个名称注释,不知道为什么它会找到重复的 class
我发现了问题,似乎是这个插件的想法:
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 版本的其他项目中工作时会导致它。