[英]Mapstruct randomly generating setters
I recently discovered Mapstruct and something quite weird is happening.我最近发现了 Mapstruct 并且发生了一些非常奇怪的事情。 Almost every single time, new implementation of mapper is generating and sometimes is with/without getters and setters.
几乎每一次,都会生成新的 mapper 实现,有时会带有/不带有 getter 和 setter。 After some research I still can't find a issue with that.
经过一番研究,我仍然找不到这个问题。
As all of the dependencies, as well as proper annotation paths are in pom.xml由于所有依赖项以及正确的注释路径都在 pom.xml
<dependencies>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.2.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.2.Final</version>
</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-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka-test</artifactId>
<version>2.9.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.15.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.1.Final</version>
</path>
</annotationProcessorPaths>
<compilerArgs>
<compilerArg>
-Amapstruct.defaultComponentModel=spring
</compilerArg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
@Mapper(componentModel = "spring")
public interface MessageMapper {
MessageEntity messageDtoToEntity(MessageDTO messageDTO);
MessageDTO messageEntityToDto(MessageEntity messageEntity);
}
@Getter
@Setter
@Entity
@Table(name = "messages")
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class MessageEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Setter(AccessLevel.NONE)
private Long id;
@Column(name = "message", nullable = false)
private String message;
public static MessageEntity createMessageEntityWithName(String message) {
MessageEntity mes = new MessageEntity();
mes.setMessage(message);
return mes;
}
}
@NoArgsConstructor
@Getter
@Setter
public class MessageDTO {
@NotNull(message = "Field message has to be provided")
private String message;
public static MessageDTO create(String message) {
MessageDTO mes = new MessageDTO();
mes.setMessage(message);
return mes;
}
}
@Component
public class MessageMapperImpl implements MessageMapper {
@Override
public MessageEntity messageDtoToEntity(MessageDTO messageDTO) {
if ( messageDTO == null ) {
return null;
}
MessageEntity messageEntity = new MessageEntity();
return messageEntity;
}
@Override
public MessageDTO messageEntityToDto(MessageEntity messageEntity) {
if ( messageEntity == null ) {
return null;
}
MessageDTO messageDTO = new MessageDTO();
return messageDTO;
}
}
The reason why this is not working is because the annotationProcessorPaths
is configured on the spring-boot-maven-plugin
.这不起作用的原因是
annotationProcessorPaths
是在spring-boot-maven-plugin
上配置的。 The annotationProcessorPaths
needs to be configured on the maven-compiler-plugin
and then the annotation processors will properly be used (including the lombok-mapstruct-binding
. annotationProcessorPaths
需要在maven-compiler-plugin
上配置,然后才能正确使用注释处理器(包括lombok-mapstruct-binding
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.