I have the following dagger 2.52 dependency in my project:
<dependency>
<groupId>com.google.dagger</groupId>
<artifactId>dagger</artifactId>
<version>2.52</version>
</dependency>
And I have this annotation processor:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<release>17</release>
<annotationProcessorPaths>
<!-- Dagger 2 -->
<path>
<groupId>com.google.dagger</groupId>
<artifactId>dagger-compiler</artifactId>
<version>2.52</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
Now, when I use IntelliJ to let dagger generate the code, I see something like this:
import dagger.internal.DaggerGenerated;
import dagger.internal.Factory;
import dagger.internal.Preconditions;
import dagger.internal.QualifierMetadata;
import dagger.internal.ScopeMetadata;
import javax.annotation.processing.Generated;
import javax.inject.Provider;
@ScopeMetadata("jakarta.inject.Singleton")
@QualifierMetadata
@DaggerGenerated
@Generated(
value = "dagger.internal.codegen.ComponentProcessor",
comments = "https://dagger.dev"
)
I wonder why the imports refers to javax
, when I specifically incremented the dagger and dagger-compiler versions.
How can I instruct Dagger to generate code that imports jakarta.inject.Provider
instead of javax.inject.Provider
?
It’s because specifically Dagger 2.52
comes with both javax-inject
and jakarta.inject-api
dependencies.
Fix is to exclude javax-inject
dependency from dagger
dependency in the pom.xml:
<dependency>
<groupId>com.google.dagger</groupId>
<artifactId>dagger</artifactId>
<version>2.52</version>
<exclusions>
<exclusion>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
</exclusion>
</exclusions>
</dependency>
See if this helps.