【问题标题】:MapStruct implementations not being generated when using `mvn package`使用“mvn package”时未生成 MapStruct 实现
【发布时间】:2021-12-21 06:30:33
【问题描述】:

这里是 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 编译时,不会生成类。这是什么原因造成的?

【问题讨论】:

    标签: java spring-boot maven mapstruct


    【解决方案1】:

    我第一次使用 mapstruct 时唯一想到的就是类必须是接口,这是我使用 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 并没有发现任何问题,所以我认为这不是问题,祝你好运!

    【讨论】:

    • 我在接口上使用注解。还是谢谢
    • 我解决了这个问题。你可以看看我对这个问题的回答,看看如何
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-14
      • 2018-12-05
      • 1970-01-01
      • 2016-07-22
      • 2021-04-15
      • 1970-01-01
      • 2019-10-10
      • 2016-07-14
      相关资源
      最近更新 更多