MapStruct 未生成实现类

问题描述 投票:0回答:8
java spring-boot mapstruct
8个回答
12
投票

添加

mapstruct-processor
依赖项为我解决了这个问题。


7
投票

问题是我的映射器缺少注释

@Mapper


7
投票

如果你使用kotlin,则需要使用

kapt
而不是
annotationProcessor

Gradle 示例:

plugins {
  kotlin("kapt") version "1.4.32"
}
...
dependencies {
  ...
  implementation("org.mapstruct:mapstruct:1.4.2.Final")
  kapt("org.mapstruct:mapstruct-processor:1.4.2.Final")
}

之后,如果执行

gradle build

,就会生成实现

2
投票

对我来说问题是:

<useIncrementalCompilation>false</useIncrementalCompilation>

注释掉后,一切正常!

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source>${jdk.target.version}</source>
        <target>${jdk.target.version}</target>
        <!--<useIncrementalCompilation>false</useIncrementalCompilation>-->
        <annotationProcessorPaths>
            <path>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>${org.mapstruct.version}</version>
            </path>
        </annotationProcessorPaths>
    </configuration>
</plugin>

1
投票

如果您将 Kotlin 与 Maven 结合使用,则可以添加以下依赖项:

    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>1.4.2.Final</version>
    </dependency>

    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>1.4.2.Final</version>
    </dependency>

并将 kapt 执行添加到 kotlin-maven-plugin 中,如下所示:

   <plugin>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-maven-plugin</artifactId>
                <version>1.5.0</version>
                <executions>
                    <execution>
                        <id>kapt</id>
                        <goals>
                            <goal>kapt</goal>
                        </goals>
                        <configuration>
                            <sourceDirs>
                                <sourceDir>src/main/kotlin</sourceDir>
                                <sourceDir>src/main/java</sourceDir>
                            </sourceDirs>
                            <annotationProcessorPaths>
                                <!-- Specify your annotation processors here. -->
                                <annotationProcessorPath>
                                    <groupId>com.google.dagger</groupId>
                                    <artifactId>dagger-compiler</artifactId>
                                    <version>2.9</version>
                                </annotationProcessorPath>
                            </annotationProcessorPaths>
                        </configuration>
                    </execution>
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>test-compile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

0
投票

我也遇到过这个问题。就我而言,出现此错误:

Java:由于错误元素存在问题,没有为 Mapper 创建实现

当应用程序运行时。

我曾经使用Spring Boot版本

2.4.3
当我将版本降低到
2.2.6.RELEASE
时它开始工作


0
投票

尝试属性> Maven >注释处理>(启用)自动配置JDT APT。


0
投票

我已经尝试了这里的所有内容,但没有任何效果,所以我复制了实际上在那里工作的 pom.xml,我发现我们必须在构建标记之后添加此配置。 然后编译,会在目标文件夹生成Mapper Impl类

<repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        </repository>
</repositories>
© www.soinside.com 2019 - 2024. All rights reserved.