小能豆

JXLS 3.0.0-BETA 问题

javascript

之前项目依赖了 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避免了


阅读 62

收藏
2024-06-17

共1个答案

小能豆

你可以通过几种方法来解决这个依赖冲突问题,确保你的项目不会自动升级到不兼容的 3.0.0 版本的 jxls。以下是几种常见的解决方案:

1. 强制使用特定版本

在你的 pom.xml 文件中,使用 <dependencyManagement> 元素来强制指定 jxls 的版本。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls</artifactId>
            <version>2.x.x</version>
        </dependency>
    </dependencies>
</dependencyManagement>

2. 排除依赖中的版本

在你的 pom.xml 文件中,排除 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>

3. 使用 Maven Enforcer 插件

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>

4. 直接指定依赖版本

确保所有相关的依赖都指向特定版本。你可以在 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> 元素来管理你的依赖版本,这样可以集中控制依赖的版本,并且在整个项目中强制执行特定的版本。

2024-06-17