Eclipse中Maven可正常构建项目出现delete方法未定义错误
问题描述
在Eclipse中开发OSGI插件项目时,遇到以下编译错误:
The method delete(Sumti) is undefined for the type SumtiRepository DeleteBridiTest.java
相关代码片段:
- SumtiRepository.java:继承Spring Data的
CrudRepository并自定义查询方法
@Repository public interface SumtiRepository extends CrudRepository<Sumti, String> { Set<Sumti> findAllByRepresentation(String representation); }
- DeleteBridiTest.java:测试代码调用
delete方法时触发错误
@Test @DisplayName("- the id and representation are cleared from the repository") void test1() { deleteBridi.apply(SUMTI_IS_A_THING); verify(deleteBridi.sumtiRepository).delete(SUMTI_IS_A_THING_SUMTI); }
已知背景:
- 按下F3可正常定位到
org.springframework.data.repository.CrudRepository,该接口确实包含delete(T)方法 - 项目采用
eclipse-plugin打包方式,MANIFEST.MF中依赖了包裹后的Spring相关bundle - 目标平台已加载,Maven可正常构建,但Eclipse始终提示上述错误
解决方案
1. 补充Spring Data Commons的依赖声明
CrudRepository实际来自spring-data-commons包,但当前MANIFEST.MF的Require-Bundle中仅包含wrapped.org.springframework.data.spring-data-keyvalue,缺少对spring-data-commons的依赖。
在MANIFEST.MF的Require-Bundle节点中添加:
wrapped.org.springframework.data.spring-data-commons;bundle-version="3.5.1",
2. 刷新Eclipse项目依赖与类路径
- 右键项目 → Maven → Update Project,勾选"Force Update of Snapshots/Releases"后确认
- 右键项目 → Plug-in Tools → Update Classpath
- 执行清理构建:顶部菜单Project → Clean,选择当前项目后运行
3. 验证目标平台的Spring Data Commons配置
确认目标平台中spring-data-commons的包裹状态:
- 打开Window → Preferences → Plug-in Development → Target Platform
- 选中当前目标平台点击Edit,检查
spring-data-commons是否被正确转换为OSGI bundle
4. 排查类路径冲突
可能存在多版本CrudRepository导致Eclipse识别混乱:
- 右键项目 → Build Path → Libraries,检查所有Spring相关依赖,确保仅保留目标平台指定的3.5.1版本
spring-data-commons - 移除重复或版本冲突的依赖包
5. 安装Eclipse Spring Data插件支持
确保Eclipse具备Spring Data的语法识别能力:
- 打开Help → Eclipse Marketplace,搜索安装"Spring Tools 4 (aka Spring IDE and Spring Tool Suite)"
- 安装完成后重启Eclipse,重新检查项目
内容的提问来源于stack exchange,提问作者Árpád Magosányi
相关产品推荐
相关产品推荐

