spring Mapstruct未在生成的源文件中更新其getter和setter

iaqfqrcu  于 2022-11-21  发布在  Spring
关注(0)|答案(5)|浏览(262)

我有一个实体,它的属性我以前写的像private Long ICU;
我使用的是mapstruct:
下面是我为上述实体创建的Map器:
第一个
我遇到的问题是,我想将属性从ICU更改为icu,我这样做了,结果导致了以下错误:
嵌套异常是java.lang.NoSuchMethodError:
使用Java语言编写的代码。
看起来mapstruct生成其getter和setter的基础是:private Long ICU;生成setICU和getICU这样的方法。但是现在我已经将属性从ICU更改为icu,mapstruct没有将其方法更新为setIcugetIcu
我无法手动更改mapstruct生成的文件。
这里还有我的pom.xml(至少是关于mapstruct的部分)

<dependency>
  <groupId>org.mapstruct</groupId>
  <artifactId>mapstruct</artifactId>  
  <version>1.3.0.Final</version>
</dependency>

              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>1.3.0.Final</version>
                        </path>
                    </annotationProcessorPaths>
                    <compilerArgs>
                        <compilerArg>
                            <arg>-Amapstruct.defaultComponentModel=spring</arg>
                        </compilerArg>
                    </compilerArgs>
                </configuration>
            </plugin>

知道如何让mapstruct更新它生成的源文件吗?

vsmadaxz

vsmadaxz1#

您需要按顺序首先提供lombok插件,然后提供mapstruct-processor插件,就像这样。

<configuration>
    <source>1.8</source>
    <target>1.8</target>
    <annotationProcessorPaths>
        <path>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </path>
        <path>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>
            <version>1.4.2.Final</version>
        </path>
    </annotationProcessorPaths>
</configuration>
v09wglhw

v09wglhw2#

由于某种原因,项目的重新编译没有运行注解处理器。MapStruct由Java编译器调用,maven编译器插件负责清理包含生成的类的文件夹。
mvn clean compile总是可行的。但是,如果做了一个改变,然后做mvn compile不可行,我会尝试最新版本的maven编译器插件,如果仍然不可行,为插件创建一个错误报告。

v09wglhw

v09wglhw3#

如果将Lombok用于实体和DTO,则必须按如下方式更新pom.xml:

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${mapstruct.version}</version>
                        </path>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </path>
                    </annotationProcessorPaths>
                    <compilerArgs>
                        <arg>-Amapstruct.defaultComponentModel=spring</arg>
                    </compilerArgs>
                </configuration>
            </plugin>

然后Mupstruct将能够看到它们的getter和setter。
(You我可以检查我的project和它的demo来查看这个操作。)

jrcvhitl

jrcvhitl4#

感谢https://stackoverflow.com/users/10467757/adil-aslam-sachwani关于在lombok的处理器之后设置mapstruct处理器的回答。它对我很有效,但是我在gradle上有它,所以在这种情况下,它应该是这样的:

implementation 'org.mapstruct:mapstruct:1.5.2.Final'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.2.Final'
tpgth1q7

tpgth1q75#

我知道这是一个老问题,但是在像Dan Dragut一样编辑您的pom.xml之后,如果您使用intellij,请尝试单击位于“run”按钮左侧的锤子,这将导致重建项目,然后您生成的源代码将再次更新

相关问题