我有一个实体,它的属性我以前写的像private Long ICU;
我使用的是mapstruct:
下面是我为上述实体创建的Map器:
第一个
我遇到的问题是,我想将属性从ICU更改为icu,我这样做了,结果导致了以下错误:
嵌套异常是java.lang.NoSuchMethodError:
使用Java语言编写的代码。
看起来mapstruct生成其getter和setter的基础是:private Long ICU;
生成setICU和getICU这样的方法。但是现在我已经将属性从ICU更改为icu,mapstruct没有将其方法更新为setIcu
和getIcu
。
我无法手动更改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更新它生成的源文件吗?
5条答案
按热度按时间vsmadaxz1#
您需要按顺序首先提供lombok插件,然后提供mapstruct-processor插件,就像这样。
v09wglhw2#
由于某种原因,项目的重新编译没有运行注解处理器。MapStruct由Java编译器调用,maven编译器插件负责清理包含生成的类的文件夹。
做
mvn clean compile
总是可行的。但是,如果做了一个改变,然后做mvn compile
不可行,我会尝试最新版本的maven编译器插件,如果仍然不可行,为插件创建一个错误报告。v09wglhw3#
如果将Lombok用于实体和DTO,则必须按如下方式更新pom.xml:
然后Mupstruct将能够看到它们的getter和setter。
(You我可以检查我的project和它的demo来查看这个操作。)
jrcvhitl4#
感谢https://stackoverflow.com/users/10467757/adil-aslam-sachwani关于在lombok的处理器之后设置mapstruct处理器的回答。它对我很有效,但是我在gradle上有它,所以在这种情况下,它应该是这样的:
tpgth1q75#
我知道这是一个老问题,但是在像Dan Dragut一样编辑您的pom.xml之后,如果您使用intellij,请尝试单击位于“run”按钮左侧的锤子,这将导致重建项目,然后您生成的源代码将再次更新