Can't find a proper working example how to write own modules/libs with auto-configuration.
Can someone explain how to write proper modules for micronaut app?
Tried to load @Factory
class and adding package-info.java
with @Configuration
annotation but that didn't help. Also was adding proper package to scan in main class like this Micronaut.build(args).packages("com.mypackage").start()
Sample:
package com.mypackage;
public class FooService {
public void bar() {
}
}
package com.mypackage;
import io.micronaut.context.annotation.Bean;
import io.micronaut.context.annotation.Factory;
import javax.inject.Singleton;
@Factory
public class FooFactory {
@Bean
@Singleton
public FooService fooService() {
return new FooService();
}
}
//com.mypackage.package-info.java
@Configuration
package com.mypackage;
import io.micronaut.context.annotation.Configuration;
The actual problem was in Maven.
Micronaut Annotation Processor was not triggered by maven-compiler-plugin
.
The solution was to configure annotation processors in maven-compile-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>${maven-compiler-plugin.source}</source>
<target>${maven-compiler-plugin.target}</target>
<encoding>${maven-compiler-plugin.encoding}</encoding>
<annotationProcessorPaths>
<!-- uncomment if you are using lombok -->
<!-- path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path -->
<path>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-inject-java</artifactId>
<version>${micronaut.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>