spring-boot 2.5.2 带有 mapstruct\lombok 和 swagger2 (mapstruct 不起作用)

标签 spring-boot swagger-2.0 mapstruct

我将spring-boot的项目框架从[2.1.0.RELEASE]升级到[2.5.2]和一些依赖项,但是现在swagger2和mapstruct不能一起工作。我也使用lombok。这是我的pom.xml(删除一些不相关的东西),但现在我得到了错误:

java: package org.mapstruct does not exist

pom.xml

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <jedis.version>2.9.0</jedis.version>
    <log4jdbc.version>1.16</log4jdbc.version>
    <swagger.version>2.9.2</swagger.version>
    <fastjson.version>1.2.54</fastjson.version>
    <druid.version>1.1.10</druid.version>
    <commons-pool2.version>2.5.0</commons-pool2.version>
    <org.mapstruct.version>1.4.2.Final</org.mapstruct.version>
    <org.projectlombok.version>1.18.20</org.projectlombok.version>
    <lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>
</properties>
<!--Spring boot start-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-properties-migrator</artifactId>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>

    <!-- spring cache -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
    <!-- redis -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!--Spring boot end-->


    <!--swagger2 -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>${swagger.version}</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <groupId>io.swagger</groupId>
                <artifactId>swagger-annotations</artifactId>
            </exclusion>
            <exclusion>
                <groupId>io.swagger</groupId>
                <artifactId>swagger-models</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>${swagger.version}</version>
    </dependency>
    <dependency>
        <groupId>io.swagger</groupId>
        <artifactId>swagger-annotations</artifactId>
        <version>1.5.21</version>
    </dependency>
    <dependency>
        <groupId>io.swagger</groupId>
        <artifactId>swagger-models</artifactId>
        <version>1.5.21</version>
    </dependency>

    <!--lombok and mapstruct -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${org.projectlombok.version}</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-jdk8</artifactId>
        <version>${org.mapstruct.version}</version>
    </dependency>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>${org.mapstruct.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>



<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source> <!-- depending on your project -->
                <target>1.8</target> <!-- depending on your project -->
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>${org.projectlombok.version}</version>
                    </path>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>${org.mapstruct.version}</version>
                    </path>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok-mapstruct-binding</artifactId>
                        <version>${lombok-mapstruct-binding.version}</version>
                    </path>
                    <!-- other annotation processors -->
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>

如果我删除

<exclusion>
   <groupId>org.mapstruct</groupId>
   <artifactId>mapstruct</artifactId>
</exclusion>

来自 swagger2,然后我收到此错误。

java: Couldn't retrieve @Mapper annotation

那么,遇到这种情况我该怎么办,谢谢。 顺便说一句,我使用的是 Intellij IDEA 2021.1。

最佳答案

不好意思,我没注意到

<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-jdk8</artifactId>
    <version>${org.mapstruct.version}</version>
</dependency>

更改为

        <dependency>
          <groupId>org.mapstruct</groupId>
          <artifactId>mapstruct</artifactId>
          <version>${org.mapstruct.version}</version>
        </dependency>

已成功。

关于spring-boot 2.5.2 带有 mapstruct\lombok 和 swagger2 (mapstruct 不起作用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68436723/

相关文章:

swagger-ui - 删除 SpringFox SwaggerUI 中的基本错误 Controller

java - 在 Quarkus 下使用 MapStruct 和 Lombok

java - Spring Boot gRPC : How to return error code when business error happens?

java - 使用 Spring-Kafka-2.3.0 及更高版本使用主题中的消息并以指数退避重试,直到成功为止

java - 无法从招摇中下载文件

spring-mvc - Controller 没有出现在 swagger-ui.html 中

java - 如何针对不同的数据类型使用MapStruct?

java - 如何使用一个对象中的多个属性并将其映射到另一个对象中的单个属性?

tomcat - FindClass 因 prunsrv 和 springboot 而失败?

Spring boot standalone tomcat HttpServletResponse 总是返回状态 200