今天一上班,打开Eclipse,发现工作区里很多项目都突然报错,选中项目看到的报错信息令人不解:
Invalid classpath container: 'JUnit 4' in project ...
进入项目属性检查后发现,报错的项目都是构建路径里添加了JUnit4库,或依赖的项目的构建路径里有JUnit4。
既然是JUnit 4库搞的鬼,那么思路无非就是删掉或者换版本。
经测试,从构建路径里删除JUnit 4库,或替换成JUnit 3或5都能去除报错。但是,需要我每个项目都去修改,这不是我想要的。
在搜索引擎的帮助下,很快锁定了一个Issue,提交日期是两周前,地址如下:
https://github.com/eclipse/xtext/issues/3178
在这个Issue中,提交人提到这个错误的出现原因是eclipse的plugins目录下出现了org.hamcrest包的两个版本,因为重复加载导致了问题。
我一看,果然有两个版本!这个错误原因可真Java哈。
Issue最后,有人提交了一个PR,用于解决这个问题:
https://github.com/eclipse-jdt/eclipse.jdt.ui/pull/1611
PR里的解决方案是,把hamcrest的3.0版本纳入版本依赖范围,而且只需要改几个字符串就行。
eclipse\plugins目录下找到org.eclipse.jdt.junit.core_3.13.200.v20240524-2038.jar,复制出来备份好以防万一。
根据PR里的文件路径,解压出第一个要修改文件JunitPreferenceInitializer.class。用任意十六进制编辑器打开,搜索字符串:
。PR里对这个字符串有两个更改。首先把http改为了https,其次把结尾的1.3改为3.0。这里有个注意点,字符串前面的两个字节记录了字符串的长度,针对这个字符串,长度值为002D,即45,原字符串的长度确实是45个字符,因为修改这个字符串添加了一个s,因此需要把长度值对应的修改为002E,即46。
保存修改后,将文件替换回jar包。
同样的方式处理一下BuildPathSupport.class。
最后把修改过的jar包放回eclipse\plugins下,重启eclipse,项目上的报错顺利消失了,运行一个单元测试也正常。
woyoull 2024-09-18
浮思特科技 2024-09-18
汽配圈子 2024-09-18
SOOMAL音频影像 2024-09-18