解决maven打包缺少依赖class xxx for user defined function to_pinyin failed to load问题
作者:hammring
在使用自定义函数时因依赖缺失导致报错,通过定位Maven打包配置发现缺少依赖包,解决方法是在pom.xml中添加maven-shade-plugin插件,实现依赖打包和类隔离,成功解决依赖加载问题
1. 问题报错
FAILED: ODPS-0130071:[1,8] Semantic analysis exception - class xxx for user defined function xxx failed to load.
Some dependencies are missing. Detail messages are: net/sourceforge/pinyin4j/format/exception/BadHanyuPinyinOutputFormatCombination
2.问题定位
(1) 打好的jar包解压打开发现确实没有发现依赖,定位问题到maven打jar包显示缺少依赖
根据查找资料发现,maven-shade-plugin提供了两大基本功能:
- a.将依赖的jar包打包到当前jar包(常规打包是不会将所依赖jar包打进来的);
- b.对依赖的jar包进行重命名(用于类的隔离);
3.问题解决方法
在pom.xml中添加plugin java编译插件。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <filters> <filter> <artifact>*:*</artifact> <!-- 这里必须要填下面这段,否则报错 --> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <!-- 下面这里要填要运行的类,否则会报错 --> <mainClass>xxx</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。