Apache Tika Parser在Fat Jar中仅识别2种MIME类型的问题排查
Tika在Assembly构建的Fat Jar中仅识别少量MIME类型的解决办法
问题场景
创建空Maven项目,引入tika-core、tika-parsers-standard-package、slf4j-api、slf4j-simple依赖,使用maven-assembly-plugin构建Fat Jar。生成的Jar文件大小为47M,通过mvn dependency:tree检查依赖无异常,但运行诊断代码时,Tika仅返回video/mpeg、video/x-msvideo两种支持的MIME类型,且无任何警告输出。
排查尝试
- 调整依赖版本、修改插件配置、切换插件版本,问题依旧
- 在IDE中直接运行项目,Tika可正常识别229种MIME类型
- 创建空Spring Boot项目引入相同依赖,运行后功能正常
解决方案
将构建插件替换为maven-shade-plugin,并添加ServicesResourceTransformer转换器,配置示例如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> </transformers> </configuration> </execution> </executions> </plugin>
原因解析
Tika依赖Java的ServiceLoader机制加载各类解析器,maven-assembly-plugin打包时会直接覆盖多个依赖中的META-INF/services文件,导致大部分解析器的配置丢失;而ServicesResourceTransformer会合并所有依赖中的META-INF/services文件内容,保证ServiceLoader能找到所有实现类,从而让Tika正常识别全部MIME类型。
内容的提问来源于stack exchange,提问作者Oleg Gritsak
相关产品推荐
相关产品推荐

