解决jar包互相依赖导致的错误


最近项目中需要使用阿里巴巴的canal记录mysql的binary log,来监听主数据库的变化,从而备份到从数据库服务器中。但是在一切测试完毕之后,导入到原项目的时候,居然报错,解决了一个上午,终于解决,报错内容如下:
Image
发现,仅仅在向pom.xml文件中添加canal的依赖时,就会包上述的错误,我添加的内容如下:

<!– canal依赖jar –>
        <dependency>
            <groupId>com.alibaba.otter</groupId>
            <artifactId>canal.client</artifactId>
            <version>1.0.23</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.otter</groupId>
            <artifactId>canal.protocol</artifactId>
            <version>1.0.23</version>
        </dependency>
这样看来,显然是jar依赖导致的错误,于是我挨个排查,最后确定是spring的版本问题,canal依赖的是spring-2.5.6这个版本,但项目中使用的是spring-4.2.3,确定了这个错误,就可以将这个依赖从中剔除了,我使用的是maven的<exclusion>这个功能,如下:
<!– canal依赖jar –>
        <dependency>
            <groupId>com.alibaba.otter</groupId>
            <artifactId>canal.client</artifactId>
            <version>1.0.23</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.otter</groupId>
            <artifactId>canal.protocol</artifactId>
            <version>1.0.23</version>
            <!– Warnning: 原canal依赖的spring-2.5.6会导致项目出现
                java.lang.reflect.MalformedParameterizedTypeException的问题,故排除掉该依赖 –>
            <exclusions>
                <exclusion>
                <artifactId>spring</artifactId>
                <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
剔除了这个jar包之后,果然不再报错了,真不知道阿里巴巴怎么还没修改这个问题,spring都升级了这么多的版本了居然还在维持原样,真是误人子弟呢。

分享到:

发表评论

昵称

抢个沙发呗~~~