简体   繁体   English

Mapstruct 随机生成设置器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM