En utilisant les dernières versions de Springboot et de MonttructCstruct et de construction avec Maven, j'essaie de mettre en œuvre l'exemple "Démarrer ici" indiqué dans le site officiel de Mapstructeur
Mon code est encore plus simple:
pom.xml
<org.mapstruct.version>1.3.1.Final</org.mapstruct.version>
(...)
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
(...)
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
Voiture.java
public class Car {
private String model;
// Constructors, setters and getters...
}
Cardto.java
public class CarDto {
private String theModel;
// Constructors, setters and getters...
}
Interface carmapper.java
@Mapper
public interface CarMapper {
CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );
@Mapping(source = "model", target = "theModel")
CarDto carToCarDto(Car car);
}
Application principale
@SpringBootApplication
public class MappertestApplication {
public static void main(String[] args) {
SpringApplication.run(MappertestApplication.class, args);
Car c = new Car("Volkswagen");
CarDto cdto = CarMapper.INSTANCE.carToCarDto(c);
}
}
Tout le code est dans ce repo public: https://github.com/pgbonino/mappertest
Lorsque vous courez, je reçois cette erreur:
Exception in thread "main" Java.lang.ExceptionInInitializerError
at com.gallelloit.mappertest.MappertestApplication.main(MappertestApplication.Java:14)
Caused by: Java.lang.RuntimeException: Java.lang.ClassNotFoundException: Cannot find implementation for com.gallelloit.mappertest.CarMapper
at org.mapstruct.factory.Mappers.getMapper(Mappers.Java:61)
at com.gallelloit.mappertest.CarMapper.<clinit>(CarMapper.Java:10)
... 1 more
Caused by: Java.lang.ClassNotFoundException: Cannot find implementation for com.gallelloit.mappertest.CarMapper
at org.mapstruct.factory.Mappers.getMapper(Mappers.Java:75)
at org.mapstruct.factory.Mappers.getMapper(Mappers.Java:58)
... 2 more
J'ai trouvé ce numéro dans le projet officiel de MapStruct, qui semble décrire le même problème. Cependant, dans ce cas, une configuration personnalisée a été effectuée (nom personnalisé de la mise en œuvre). Dans mon cas, tout est laissé par défaut.
Une idée?
Bien que mon scénario ne soit pas le même que le vôtre, cela a entraîné la même erreur - je pose donc cette réponse pour aider les autres à avoir commis la même erreur que je faisais la même chose à la recherche d'une solution.
J'importais la dépendance mavenne:
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
Mais j'ai oublié d'ajouter le chemin du processeur d'annotation dans le plugin Maven Compiler:
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
</annotationProcessorPaths>