摘要: 接上一篇,由于Solr6在使用mmseg4j中文分词时,Solr会出现getInstanceDir()
的NoSuchMethodError
异常,需要修改mmseg4j源码,使之兼容。如果还未配置好mmseg4j,请到Solr6配置中文分词库mmseg4j
下载源码
- 开源地址:https://github.com/chenlb/mmseg4j-solr
- 环境与工具:JDK8,Eclipse4.5(带有git插件,Maven插件)
- 引入项目:Import – > Git – > Projects from Git – > Clone URI
填入URI:https://github.com/chenlb/mmseg4j-solr ,其他都用默认值,用户名、密码留空
Next – > Next – > Import as general project
转换成Maven项目:工程mmseg4j-solr 右键 – > Configure – > Convert to Maven Project – > 等待转换完成,要下载很多Jar包,需要比较长时间
修改
pom.xml
文件:升级solr版本为solr6,更改mmseg4j为2.3.2-SNAPSHOT。我还修改了maven-plugins的版本,因为项目里的版本我未能从中央仓库找到。
修改源码
- 等待Eclipse自动build项目,发现错误:
- 改源码:将Solr6已经改变的API改成
srl.getInstancePath()
,错误消失。 - 打包:项目上右键 – > Run As – > Maven Build(目标填:clean install)
- 发现错误:
Solr no longer supports forceful unlocking via the 'unlockOnStartup' option.
发现在solrconfig.xml
的第63行,有这样的配置<unlockOnStartup>true</unlockOnStartup>
,而如果为true,在启动的时候不锁定任何持有写或者提交的锁。 这打败了允许多个程序安全访问lucene索引并且应该小心使用的理论依据。 因此Solr6已经不允许这样的操作,我来把它改为<unlockOnStartup>false</unlockOnStartup>
,当然,最简单的办法就是把它注释掉。 - 打包:
- 发现问题:
Unsupported major.minor version
,Java版本不对应,Solr6需要JDK8才可以。 - 修改:
Java Compiler
和Java Build Path
为1.8版本的Java。 - 打包:
- 发现问题:
SolrCore 'mmseg4j_core' is not available due to init failure: Error loading class 'org.apache.solr.handler.admin.AdminHandlers'
,有一个包找不到,去看看源码。
- 对比源码,发现,Solr5.0开始,这个AdminHandlers已经被废弃了(类名上有删除线),并且在Solr6.0以后,这个类直接被移除了,所以,已经找不到这个AdminHandlers了。
- 修改:找到使用
AdminHandlers
的地方,在solrconfig.xml
的第240行,发现<requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
,由于这个Handler 已经不再用,于是将这行代码注释。 - 打包
- Testcase测试通过,在项目target目录下生成了需要的jar包,替换原来的
mmseg4j-solr-2.3.0.jar
,大功告成!
总结,升级别人的jar包还是很折腾的,好在,这个项目已经开源,需要修改的地方也不多。如果你不愿意折腾,我把打包好的jar文件放在了CSDN上,包含
mmseg4j-solr-2.3.2.jar
和mmseg4j-core-1.10.0.jar
,点击下载。