SpringBoot - STS/Eclipse将MapStructMap器实现标记为错误“类型X已定义”

csbfibhn  于 2022-11-04  发布在  Eclipse
关注(0)|答案(1)|浏览(200)

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器实现仍然会出现在自动生成的文件中。

1zmg4dgp

1zmg4dgp1#

为了防止有人发现我在这种情况下使用的解决方案有用,我将把它留在这里。
由于Eclipse和Maven的“清理”功能都不清理导致这些错误的“垃圾”文件,因此我采取了以下步骤来解决这个问题:
搜索导致问题的[垃圾]文件可能所在的路径。
根据我的设置(linux机器、STS/Eclipse、Maven...),它们位于以下路径中:

$HOME/project-path/target/classes/path-to-mappers/ -> files.class, files.java
    $HOME/project-path/.apt-generated/path-to-mappers/ -> files.class, files.java (These files are hidden; won't be found in a 'regular' files search)

在不同设置的情况下,只需调整这些路径/文件夹以执行搜索。
并手动删除它们-所有这些文件都是派生/缓存的文件,因此删除一些无法通过简单的Maven更新项目重新生成的文件没有任何风险。
运行Maven更新项目,一切都会再次完美运行,错误也会消失。

相关问题