使用“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>
这是给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>