异常现象 :
编译时正常,压住ctrl + 鼠标单击StringUtils 发现引用的是 commons-lang3-3.2.1.jar中的StringUtils.class。
eclipse 启动项目执行正常不报错。
部署到linux 执行报错java.lang.NoSuchMethodError: org.apache.commons.lang3.StringUtils.repacePattern。
此时pom.xml中直接引入commons-lang3-3.2.1.jar的位置在220几行,然后有一个第三方提供的接口驱动包meta-api.jar
(里面依赖了 hive-exec-1.1.1.jar 此jar 依赖commons-lang3) 在pom.xml 中1000多行。
备注:调换两个依赖包前后次序(将commons-lang3-3.2.1.jar放在 meta-api.jar之后)编译出现报错。
异常原因:
项目再运行时候虚拟机加载了meta-api.jar 中依赖的hive-exec-1.1.1.jar 依赖的commons-lang3-*.*.*.jar
由于 此commons-lang3-*.*.*.jar 版本低 StringUtils.class 没有repacePattern()方法。
所以抛出异常。
解决办法:再导入meta-api.jar 位置排除掉hive-exec-1.1.1.jar(将commons-lang3.jar 所在的 jar包排除),形式如下
<dependency>
<groupId>org.*.*</groupId>
<artifactId>meta-api</artifactId>
<version>3.9</version>
<exclusions>
<exclusion>
<groupId>com.cc.maven</groupId>
<artifactId>project-c</artifactId>
</exclusion>
</exclusions>
</dependency>