Eclipse+Java8环境下MapStruct无法生成Mapper实现类,generated目录为空
MapStruct 注解处理器在 Eclipse+ANT 环境下无法自动生成所有 *MapperImpl 类
问题描述
项目未使用 Maven/Gradle 构建工具,直接在 Eclipse 2021-06(4.20.0) 中集成 MapStruct 1.5.3 Jar 包,最终通过 ANT 生成产物。已按官方指南启用注解处理器,并将 mapstruct-processor-1.5.3.Final.jar 加入工厂路径,但自定义的 generated 目录始终为空。仅在修改单个 Mapper 类(如添加再删除空格)时,Eclipse 才会生成该类对应的 *MapperImpl;执行 Project > Clean... 操作后,生成的类会被删除,且清理后不会自动重新生成所有 Mapper 实现类。
Eclipse 错误控制台无相关异常信息,同事使用 IntelliJ 可正常生成所有实现类(排除代码问题);尝试 MapStruct 1.4.2.Final 版本无效,未使用 Lombok 等其他注解处理器,安装 m2e-apt 插件也无帮助。
解决方案
1. 校验注解处理器配置一致性
- 全局配置:打开
Window > Preferences > Java > Compiler > Annotation Processing,确认Enable annotation processing已勾选,Generated source directory设置为项目中的generated目录(建议用相对路径,如${project_loc}/generated);切换到Factory Path标签,确认已添加mapstruct-processor-1.5.3.Final.jar并勾选。 - 项目级配置:右键项目 >
Properties > Java Compiler > Annotation Processing,勾选Enable project specific settings,确保生成目录、工厂路径等配置与全局设置完全一致。
2. 调整 Eclipse 自动构建触发逻辑
- 打开
Window > Preferences > General > Workspace > Build,勾选Build automatically,保证项目变更时自动触发构建。 - 检查项目构建器:右键项目 >
Properties > Builders,确认Java Builder处于启用状态,且优先级高于其他构建器。
3. 在 ANT 脚本中显式配置注解处理
由于最终依赖 ANT 构建,需在脚本中添加注解处理器执行逻辑,确保全量生成 Mapper 实现类:
<javac srcdir="src/main/java" destdir="bin/classes" source="1.8" target="1.8" encoding="UTF-8"> <classpath> <!-- 引入 MapStruct 核心依赖 --> <pathelement location="lib/mapstruct-1.5.3.Final.jar"/> <!-- 其他项目依赖 Jar --> </classpath> <!-- 指定注解处理器路径 --> <processorpath> <pathelement location="lib/mapstruct-processor-1.5.3.Final.jar"/> </processorpath> <!-- 指定生成类的输出目录 --> <compilerarg value="-s"/> <compilerarg value="generated"/> </javac>
执行 ANT 构建时,先清理旧生成文件,再执行上述 javac 任务,强制处理所有 Mapper 类。
4. 手动触发全量注解处理
若自动构建仍无法全量生成,可尝试:
- 右键项目 >
Project > Build Project,手动触发全量编译,强制 Eclipse 对所有 Java 类执行注解处理。 - 右键项目 >
Run As > Java Application,选择任意主类触发编译流程,间接触发全量注解处理。
5. 确认生成目录的源目录配置
- 右键
generated目录 >Build Path > Use as Source Folder,确保 Eclipse 将其识别为源目录。 - 检查项目
.classpath文件,确认存在如下配置:
<classpathentry kind="src" path="generated"/>
内容的提问来源于stack exchange,提问作者Sebsen36
相关产品推荐
相关产品推荐

