MapStruct benötigt die Impl-Klasse

8

Ich habe nächste Klassen:

Mapper

%Vor%

Entität:

%Vor%

DTO:

%Vor%

Und Methode von Spring Service Klasse, wo ich diese Zuordnung verwenden:

%Vor%

Wenn ich obige Methode benutze, sehe ich die nächste Ausnahme:

  

FEHLER [DispatcherServlet] :? - Servlet.service () für Servlet   [dispatcherServlet] im Kontext mit path [] hat Ausnahme [Handler   Verarbeitung fehlgeschlagen; verschachtelte Ausnahme ist   java.lang.ExceptionInInitializerError] mit der Ursache   java.lang.ClassNotFoundException:   dto.DeviceTokensMapperImpl

Warum benötigen Mapper Implementierungsklassen? Könnte bitte jemand beraten? Danke.

    
Iurii 10.08.2015, 13:31
quelle

7 Antworten

8

MapStruct generiert Code zur Kompilierzeit, und der Aufruf von Mappers.getMapper(DeviceTokensMapper.class); sucht nach der generierten Implementierung der Mapper-Schnittstelle. Aus irgendeinem Grund scheint es in Ihrer Bereitstellungseinheit (WAR etc.) Zu fehlen.

Übrigens. Wenn Sie mit Spring als Ihrem DI-Container arbeiten, können Sie @Mapper(componentModel="spring") verwenden, und Sie können Mapper-Instanzen über die Abhängigkeitsinjektion abrufen, anstatt die Mappers factory zu verwenden.

    
Gunnar 12.08.2015, 13:37
quelle
8

Haben Sie sowohl mapstruct-processor-xx als auch mapstruct-xx Bibliotheken in Ihrem Projekt?

Ich hatte das gleiche Problem, und mir wurde klar, dass ich vergessen hatte, mapstruct-processor-xx einzubinden.

    
dplavcic 03.11.2015 18:16
quelle
2

Benutzt du Maven? Wenn ja, dann haben Sie höchstwahrscheinlich die Mapstruct-Prozessor-Konfiguration unter dem Maven-Compiler-Plugin verpasst.

Die richtige Konfiguration lautet wie folgt:

%Vor%     
Omtara 04.07.2016 06:49
quelle
2

Wenn Sie maven verwenden, müssen Sie die mapstruct-Prozessor-Abhängigkeit wie folgt hinzufügen:

%Vor%     
Lê văn Huy 13.11.2017 08:48
quelle
1

In meinem Fall hatte ich <plugin> in <pluginManagement> Tags eingeschlossen, um einen Eclipse (Mars) Bug wie folgt zu umgehen

%Vor%

Das Entfernen von <pluginManagement> -Tags hat es für mich repariert.

    
sh87 08.09.2016 02:17
quelle
1

Ich habe das gleiche Problem in meinem Projekt mit Gradle getroffen. Und ich ersetze die build.gradel von

%Vor%

bis

%Vor%

Dann bau sauber und baue. Es funktioniert jetzt!

    
Wentao Wan 06.09.2017 15:05
quelle
0

Ich bin auf dieses Problem gestoßen, weil ich ./gradlew clean build ( gradlew.bat für Windows) nach dem Erstellen / Bearbeiten der Mapper-Klasse oder verwandten Klassen nicht ausgeführt habe.

Auch etwas, das ich gefunden habe, war nützlich, da ./gradlew clean build -x test funktioniert, aber nicht den ganzen Test, was in meinem Fall viel war.

    
James 21.11.2016 15:15
quelle

Tags und Links