You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse中解决Maven项目编译与运行依赖版本冲突问题

解决Maven依赖冲突:运行时加载commons-lang 2.0而非2.6的问题

这个NoSuchMethodError的根源很明确:DateUtils.addDays()方法是在commons-lang 2.1版本才新增的,而你的运行环境加载了2.0版本,导致找不到方法。结合你提供的依赖树信息,问题出在传递依赖引入了旧版本,且依赖管理没有统一控制版本。下面是一步步的解决方案:

1. 用DependencyManagement统一控制版本

既然你提到项目里有dependencyManagement,这是统一控制依赖版本最可靠的方式。在父项目的dependencyManagement节点中明确指定commons-lang的版本为2.6,这样所有子项目都会继承这个版本,覆盖任何传递依赖的旧版本:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>
</dependencyManagement>

2. 排除传递依赖中的旧版本

在business子项目对companyName-commons-utils的依赖中,显式排除它传递引入的commons-lang 2.0,避免旧版本被加载:

<dependency>
    <groupId>com.companyName.commons.utils</groupId>
    <artifactId>companyName-commons-utils</artifactId>
    <version>1.14.5</version>
    <exclusions>
        <exclusion>
            <!-- 排除传递的commons-lang旧版本 -->
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3. 验证依赖树是否正确

执行Maven命令验证所有模块的commons-lang版本是否统一为2.6:

mvn dependency:tree -Dverbose -Dincludes=commons-lang

如果之前执行命令没有输出,可能是因为排除后依赖树中没有commons-lang的传递依赖了,但webapp和business项目应该会直接或间接使用2.6版本(通过dependencyManagement)。你也可以去掉-Dincludes参数查看完整依赖树,确认没有2.0版本的commons-lang存在。

4. 同步Eclipse项目与Maven配置

Eclipse的Maven缓存有时会和命令行不一致,需要手动更新:

  • 右键项目 → Maven → Update Project...,勾选"Force Update of Snapshots/Releases",点击OK。
  • 检查Web项目的Deployment Assembly:右键项目 → Properties → Deployment Assembly,确保列表中只有commons-lang-2.6.jar,没有2.0版本的jar包。
  • 清理并重新构建项目:点击菜单栏Project → Clean...,选择你的项目,清理后重新编译。

5. 确认运行时类加载

为了彻底验证运行时加载的jar包,可以在JVM启动参数中添加:

-verbose:class

再次运行项目,控制台会输出所有加载的类及其来源jar包,确认org.apache.commons.lang.time.DateUtils是从commons-lang-2.6.jar加载的。

关于依赖顺序的说明

Maven的依赖解析逻辑并不是简单按pom.xml中的声明顺序来的,它遵循最短路径优先(依赖层级越少越优先),如果路径长度相同才会按声明顺序选择。所以靠调整依赖顺序解决冲突并不可靠,最稳妥的方式还是用dependencyManagement统一版本,或者排除不必要的传递依赖。

内容的提问来源于stack exchange,提问作者gabriel119435

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:13:35