STS版本4.14.1.发布
Java第11版
Spring Boot v. 2.6.7
Map结构1.5.1版
我正在测试MapStruct的功能,我发现自己遇到了一个非常令人沮丧的但显然是基本的问题,我现在几个小时都不能解决这个问题。
一旦添加了MapStruct依赖项和插件到项目中,如所设想的:
<properties>
<java.version>11</java.version>
<org.mapstruct.version>1.5.1.Final</org.mapstruct.version>
</properties>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</dependency>
</annotationProcessorPaths>
<compilerArgs>
<compilerArg>
-Amapstruct.defaultComponentModel=spring
</compilerArg>
</compilerArgs>
</configuration>
</plugin>
MapStruct应该在实现Map器接口的同一个包中自动生成MapperImpl,在根文件夹“target/generated-sources/annotations”下,它做得很好。
问题是STS/Eclipse将生成的MapperImpl类标记为错误“类型XMapperImpl已定义”。
我已经搜索了项目中的所有地方-包括我的类和自动生成的类-没有这样的另一个同名类-实际上它是整个项目中唯一的Map器接口-所以我不明白它是如何被定义的。
我还清理了几次项目,重新构建了它......我能想到的任何东西,以便清理可能干扰该类的任何东西,每次项目生成XMapperImpl时,STS都会用相同的错误标记它。
在这一点上,我想知道是否有什么我可能会忽略或可能是一些错误的STS/Eclipse?
更新:我非常确定它一定是某种缓存,因为即使我删除了Map器的源文件,在更新Maven项目时,Map器实现仍然会出现在自动生成的文件中。
1条答案
按热度按时间1zmg4dgp1#
为了防止有人发现我在这种情况下使用的解决方案有用,我将把它留在这里。
由于Eclipse和Maven的“清理”功能都不清理导致这些错误的“垃圾”文件,因此我采取了以下步骤来解决这个问题:
搜索导致问题的[垃圾]文件可能所在的路径。
根据我的设置(linux机器、STS/Eclipse、Maven...),它们位于以下路径中:
在不同设置的情况下,只需调整这些路径/文件夹以执行搜索。
并手动删除它们-所有这些文件都是派生/缓存的文件,因此删除一些无法通过简单的Maven更新项目重新生成的文件没有任何风险。
运行Maven更新项目,一切都会再次完美运行,错误也会消失。