I'm working on a Gradle multi-module project with Micronaut and I need help with the following classes and interface in the application module:
Core project
@Singleton
public record OrderService(IOrderRepository iOrderRepository) implements IOrderService {
@Override
public Optional<Order> findbyId(UUID id) {
return iOrderRepository.findById(id);
}
}
Core project
@Introspected
public interface IOrderRepository{
Optional<Order> findById(@NonNull @NotBlank UUID id);
}
dependency of core project
dependencies {
annotationProcessor "io.micronaut:micronaut-inject-java:${micronautVersion}"
annotationProcessor "io.micronaut:micronaut-validation:${micronautVersion}"
implementation "io.micronaut:micronaut-inject:${micronautVersion}"
implementation "io.micronaut:micronaut-validation:${micronautVersion}"
}
The implementation of IOrderRepository is in the infrastructure module as below:
infrastructure project
@Singleton
public record OrderRepository(RootProvider<Root> rootProvider) implements IOrderRepository {
@Override
public Optional<Order> findById(@NonNull UUID id) {
return rootProvider.root().order().get(id);
}
}
dependency of infrastructure
dependencies {
annotationProcessor "io.micronaut:micronaut-inject-java:${micronautVersion}"
annotationProcessor "io.micronaut:micronaut-validation:${micronautVersion}"
implementation "io.micronaut:micronaut-inject:${micronautVersion}"
implementation "io.micronaut:micronaut-validation:${micronautVersion}"
}
Here's a visual representation of the project structure:
The infrastructure project depends on the core project. Since the definition of IOrderRepository is in the core module and implementation of the IOrderRepository is in infrastructure, I'm not sure how to handle the dependencies correctly.
The issue is that OrderRepository is in different module then the IOrderRepository module, that doesn't have a dependency. How can I will refer to different module ?
Message: No bean of type [fete.bird.interfaces.IOrderRepository] exists. Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor).
Path Taken: new $OrderController$Definition$Intercepted(IServiceBus iServiceBus,BeanResolutionContext $beanResolutionContext,BeanContext $beanContext,Qualifier $qualifier,List $interceptors) --> new $OrderController$Definition$Intercepted([IServiceBus iServiceBus],BeanResolutionContext $beanResolutionContext,BeanContext $beanContext,Qualifier $qualifier,List $interceptors) --> new ServiceBus([List handlers]) --> new GetOrderQueryHandler([IOrderService iOrderService]) --> new OrderService([IOrderRepository iOrderRepository])
at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2087)
at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1297)
at fete.bird.service.$OrderService$Definition.build(Unknown Source)
at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2354)
at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2305)
at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2251)
at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3016)
at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
at io.micronaut.context.DefaultBeanContext.findOrCreateSingletonBeanRegistration(DefaultBeanContext.java:2918)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2879)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2800)
GitHub Repo - https://github.com/anandjaisy/order-dependency-issue


It is great that you have a sample project; however, your sample project uses a non-public dependency. (Cannot build your project)
In your
coreandinfrastructure, use the Micronaut Library Plugin: