使用最新的Springboot和MapStruct版本,并使用Maven构建,我正在尝试实现the official MapStruct site中给出的"Start Here“示例
我的代码甚至更简单:
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>Car.java
public class Car {
private String model;
// Constructors, setters and getters...
}CarDto.java
public class CarDto {
private String theModel;
// Constructors, setters and getters...}
CarMapper.java接口
@Mapper
public interface CarMapper {
CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );
@Mapping(source = "model", target = "theModel")
CarDto carToCarDto(Car car);
}主要应用程序
@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);
}
}所有代码都在这个公共代码库中:https://github.com/pgbonino/mappertest
运行时,我收到以下错误:
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我在官方的MapStruct项目中发现了this issue,它似乎描述了同样的问题。但是,在这种情况下,正在执行一些自定义配置(实现的自定义名称)。在我的例子中,一切都是默认的。
有什么想法吗?
发布于 2020-10-25 20:44:10
尽管我的场景与你的不同,但它确实导致了相同的错误-因此,我发布这个答案是为了帮助其他和我犯了同样错误的人,并最终在这里寻找解决方案。
我正在导入maven依赖项:
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>但是忘记在maven编译器插件中添加批注处理器路径:
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
</annotationProcessorPaths>发布于 2021-04-06 02:07:24
我添加了mapstruct处理器依赖项,它对我有效
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.3.1.Final</version>
</dependency>发布于 2020-05-10 21:48:34
您需要确保您的IDE已正确配置以调用批注处理器。看一看IDE Setup。
看看你提供的项目,代码甚至不应该被编译。由于以下原因,MapStruct处理器将产生编译错误:
CarDto
CarDto
model中的默认构造函数在Car中不存在(只有marca)
Car中不存在theModel在CarDto中不存在(只有laMarca)https://stackoverflow.com/questions/61710510
复制相似问题