首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MapStruct -找不到实现

MapStruct -找不到实现
EN

Stack Overflow用户
提问于 2020-05-10 18:31:49
回答 7查看 16.2K关注 0票数 7

使用最新的Springboot和MapStruct版本,并使用Maven构建,我正在尝试实现the official MapStruct site中给出的"Start Here“示例

我的代码甚至更简单:

pom.xml

代码语言:javascript
复制
<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

代码语言:javascript
复制
public class Car {

    private String model;

    // Constructors, setters and getters...

}

CarDto.java

代码语言:javascript
复制
public class CarDto {

    private String theModel;

    // Constructors, setters and getters...

}

CarMapper.java接口

代码语言:javascript
复制
@Mapper
public interface CarMapper {

    CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );

    @Mapping(source = "model", target = "theModel")
    CarDto carToCarDto(Car car);
}

主要应用程序

代码语言:javascript
复制
@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

运行时,我收到以下错误:

代码语言:javascript
复制
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,它似乎描述了同样的问题。但是,在这种情况下,正在执行一些自定义配置(实现的自定义名称)。在我的例子中,一切都是默认的。

有什么想法吗?

EN

回答 7

Stack Overflow用户

发布于 2020-10-25 20:44:10

尽管我的场景与你的不同,但它确实导致了相同的错误-因此,我发布这个答案是为了帮助其他和我犯了同样错误的人,并最终在这里寻找解决方案。

我正在导入maven依赖项:

代码语言:javascript
复制
<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct</artifactId>
    <version>${org.mapstruct.version}</version>
</dependency>

但是忘记在maven编译器插件中添加批注处理器路径:

代码语言:javascript
复制
    <annotationProcessorPaths>
        <path>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>
            <version>${org.mapstruct.version}</version>
        </path>
    </annotationProcessorPaths>
票数 2
EN

Stack Overflow用户

发布于 2021-04-06 02:07:24

我添加了mapstruct处理器依赖项,它对我有效

代码语言:javascript
复制
<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-processor</artifactId>
    <version>1.3.1.Final</version>
</dependency>
票数 2
EN

Stack Overflow用户

发布于 2020-05-10 21:48:34

您需要确保您的IDE已正确配置以调用批注处理器。看一看IDE Setup

看看你提供的项目,代码甚至不应该被编译。由于以下原因,MapStruct处理器将产生编译错误:

CarDto

  • Property

  • CarDto

  • Property model中的默认构造函数在Car中不存在(只有marca)

  • Property )Car中不存在theModelCarDto中不存在(只有laMarca)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61710510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档