web-dev-qa-db-fra.com

Mapstructeur - Impossible de trouver la mise en œuvre

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?

5
ElPiter

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>
0
João Matos