之前项目依赖了 jxls jxls-poi jxls-jexcel,其中 jxls-poi 和 jxls-jexcel 内部又依赖了 jxls ,且版本号为 指定某个版本之后(形如[1.0.0,) ,查了下会自动去找最新版本 api)。而恰好最近 jxls 发了 3.0.0beta api,且 3.0.0的api 不向下兼容,导致被 poi 和 jexcel 关联到了,继而导致代码报错。请问大佬们有啥解决方案嘛,现在临时通过解决jar包冲突,强依赖 2.x版本的 jxls避免了
你可以通过几种方法来解决这个依赖冲突问题,确保你的项目不会自动升级到不兼容的 3.0.0 版本的 jxls。以下是几种常见的解决方案:
在你的 pom.xml 文件中,使用 <dependencyManagement> 元素来强制指定 jxls 的版本。
pom.xml
<dependencyManagement>
<dependencyManagement> <dependencies> <dependency> <groupId>org.jxls</groupId> <artifactId>jxls</artifactId> <version>2.x.x</version> </dependency> </dependencies> </dependencyManagement>
在你的 pom.xml 文件中,排除 jxls 依赖中的特定版本。你可以在依赖声明中使用 <exclusions> 元素来排除特定版本的依赖。
jxls
<exclusions>
<dependencies> <dependency> <groupId>org.jxls</groupId> <artifactId>jxls-poi</artifactId> <version>x.x.x</version> <exclusions> <exclusion> <groupId>org.jxls</groupId> <artifactId>jxls</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.jxls</groupId> <artifactId>jxls-jexcel</artifactId> <version>x.x.x</version> <exclusions> <exclusion> <groupId>org.jxls</groupId> <artifactId>jxls</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.jxls</groupId> <artifactId>jxls</artifactId> <version>2.x.x</version> </dependency> </dependencies>
Maven Enforcer 插件可以强制执行某些版本的依赖,这可以确保在构建过程中不会意外地使用不兼容的版本。
在 pom.xml 中添加以下配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <id>enforce-dependency-version</id> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <dependencyConvergence /> <requireUpperBoundDeps> <excludes> <exclude>org.jxls:jxls</exclude> </excludes> </requireUpperBoundDeps> </rules> </configuration> </execution> </executions> </plugin> </plugins> </build>
确保所有相关的依赖都指向特定版本。你可以在 pom.xml 中明确指定每个依赖的版本,以确保不会自动升级到不兼容的版本。
<dependencies> <dependency> <groupId>org.jxls</groupId> <artifactId>jxls</artifactId> <version>2.x.x</version> </dependency> <dependency> <groupId>org.jxls</groupId> <artifactId>jxls-poi</artifactId> <version>x.x.x</version> </dependency> <dependency> <groupId>org.jxls</groupId> <artifactId>jxls-jexcel</artifactId> <version>x.x.x</version> </dependency> </dependencies>
通过以上几种方法,你可以有效地解决 jxls 版本冲突的问题,避免项目自动升级到不兼容的 3.0.0 版本。推荐使用 <dependencyManagement> 元素来管理你的依赖版本,这样可以集中控制依赖的版本,并且在整个项目中强制执行特定的版本。