maven使用canal构建的项目,包数据行解析错误:如下
Caused by: com.alibaba.otter.canal.parse.exception.CanalParseException: parse row data failed.
Caused by: com.googlecode.aviator.exception.ExpressionRuntimeException: Execute expression error
at com.googlecode.aviator.ClassExpression.execute(ClassExpression.java:59)
at com.alibaba.otter.canal.filter.aviater.AviaterRegexFilter.filter(AviaterRegexFilter.java:74)
at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.LogEventConvert.parseRowsEvent(LogEventConvert.java:309)
at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.LogEventConvert.parse(LogEventConvert.java:106)
at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.LogEventConvert.parse(LogEventConvert.java:62)
at com.alibaba.otter.canal.parse.inbound.AbstractEventParser.parseAndProfilingIfNecessary(AbstractEventParser.java:323)
at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3$1.sink(AbstractEventParser.java:176)
at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.dump(MysqlConnection.java:121)
at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:209)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalAccessError: tried to access method com.google.common.collect.MapMaker.softValues()Lcom/google/common/collect/MapMaker; from class com.alibaba.otter.canal.filter.PatternUtils
at com.alibaba.otter.canal.filter.PatternUtils.<clinit>(PatternUtils.java:24)
at com.alibaba.otter.canal.filter.aviater.RegexFunction.call(RegexFunction.java:24)
at Script_1500257423238_0.execute0(Unknown Source)
at com.googlecode.aviator.ClassExpression.execute(ClassExpression.java:53)
... 9 more
]
一开始考虑是jar包不完整错误,后来发现是因为canal引用的guava一个被废弃的方法导致的:
具体如下:
canal版本1.20
maven中自动依赖的guava版本19.0
解决方案:
将maven自动依赖的guava版本降为18.0 。在pom中选择性的加入如下代码,其中 xxxx 部分为 依赖guava 的jar包。pom中寻找依赖guava的jar包,可以在 pom.xml中右击选择maven->show dependencies 找到guava即可。
<dependency> <groupId>xxxxx</groupId> <artifactId>xxxxx</artifactId> <version>xxxxxT</version> <exclusions> <exclusion> <artifactId>guava</artifactId> <groupId>com.google.guava</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>18.0</version> </dependency>