在使用Maven管理JAR包时,了解POM文件中依赖的加载顺序至关重要。查询资料都可以知道,POM文件中后声明的依赖会覆盖先声明的依赖。
例如,对于
ApacheJMeter_core的5.6.3和5.5版本,后声明的版本具有更高的优先级。

然而,当多个JAR包中包含同名同路径的类时,情况有所不同。Maven会按照
pom.xml文件中依赖声明的顺序加载依赖。如果两个依赖包含同名同路径的类,Maven会使用首先声明的依赖中的类。在实际项目开发中,特别是在微服务拆分过程中,为了保证服务的平滑过渡,可能会遇到多个JAR包中包含同名同路径类的情况。这时,就需要特别注意依赖的先后顺序。假设我们在做微服务拆分时,新旧服务同时存在于项目中,并且这两个服务中包含相同的类路径,这就可能会导致加载顺序的问题。
具体看以下例子,demo4项目是原工程,demo5项目为新项目。demo4,demo5中都包含
org.demo4.api.User 类。

demo5项目的POM文件示例:
demo5中User类比demo4中的多了个字段

当运行程序时,会发现加载使用的是
demo4中的User类。这是因为demo4-api先声明,所以其优先级高于后声明的demo5-api。
为了让
demo5中的User类优先加载,可以调整POM文件中依赖的顺序:
调整后,运行程序会使用
demo5中的User类,从而解决依赖冲突问题。POM文件的管理和依赖顺序需要Java开发人员特别注意,一不小心就可能会掉进坑里。通过正确管理POM文件中的依赖顺序,可以有效避免类加载冲突,确保项目的稳定性和可维护性。
- 作者:Yibin
- 链接:https://yibin.dev/article/9e59dcf4-f543-4938-b8c5-7906912d2f78
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章







