使用“mvn package”时未生成 MapStruct 实现

MapStruct implementations not being generated when using `mvn package`

这是给pom.xml的:

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>1.4.2.Final</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok-mapstruct-binding</artifactId>
        <version>0.2.0</version>
    </dependency>
    
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.17</source> <!-- depending on your project -->
                <target>1.17</target> <!-- depending on your project -->
                <release>17</release>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>1.4.2.Final</version>
                    </path>
                    <!-- other annotation processors -->
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>1.18.22</version>
                    </path>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok-mapstruct-binding</artifactId>
                        <version>0.2.0</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>

我已经用 @Mapper 注释了我的 类。当我检查目标文件夹时,映射器实现不存在。奇怪的是,当我使用 IntelliJ 的构建功能进行编译时,会生成 类 并且我可以在目标文件夹下看到它们。但是,当我使用 mvn clean package 或仅使用 mvn package 进行编译时,不会生成 类。这是什么原因造成的?

我第一次使用 mapstruct 时唯一想到的是 classes 需要是接口,这是一个示例 class 我有一个使用 mapstruct 的示例:

import org.mapstruct.Mapper;
import org.mapstruct.factory.*;

@Mapper
public interface BeaconMapper {

    public BeaconMapper INSTANCE = Mappers.getMapper( BeaconMapper.class ); 

    public BeaconDTO BeaconToBeaconDTO( Beacon beacon );
    public Beacon BeaconDTOToBeacon( BeaconDTO beaconDTO );
}

我查看了您的 pom.xml,没有发现任何问题,所以我认为这不是问题所在,祝您好运!

感谢 GitHub - issue link 的一位用户,我解决了这个问题。问题出在源标签和目标标签中的 1. 前缀上。显然,前缀自 Java 9 以来已被弃用。所以我删除了它:

<source>17</source> <!-- depending on your project -->
<target>17</target> <!-- depending on your project -->
<release>17</release>