问题记录:微服务下的EasyExcel依赖冲突

117 阅读1分钟

项目由于一个导出的需求,需要自定义模板,所以选择了使用freemarker来实现。

引入依赖

<!--freemarker-->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.2</version>
</dependency>

等实现了之后,发现原有的easyExcel实现的导出报错

image.png

翻阅资料发现是easyexcel和poi版本不一致导致的

<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>4.0.1</version>

微服务的公共模块引入的依赖是

      <dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>4.1.2</version>
		</dependency>
			<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>4.1.2</version>
		</dependency>

解决方案就是把依赖排除掉

        <!-- excel工具包 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.10</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.poi</groupId>
                    <artifactId>poi</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.poi</groupId>
                    <artifactId>poi-ooxml</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.poi</groupId>
                    <artifactId>poi-ooxml-schemas</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

其实像是导出这种,最好是全局的依赖控制版本,还有json等依赖最好是控制为统一版本,统一更新,但是如果每个后端自己去引用,很容易出现依赖冲突问题。尤其是服务间依赖过多,所以微服务的架构,采用api和server两个服务做分离是比较好的设计

公司名-服务名、公司名-服务名-api两个服务这样子,把实体类和feign接口都放入api服务方便其他服务依赖。