在使用Maven管理JAR包时,了解POM文件中依赖的加载顺序至关重要。查询资料都可以知道,POM文件中后声明的依赖会覆盖先声明的依赖。
例如,对于ApacheJMeter_core的5.6.3和5.5版本,后声明的版本具有更高的优先级。
notion image
notion image
然而,当多个JAR包中包含同名同路径的类时,情况有所不同。Maven会按照pom.xml文件中依赖声明的顺序加载依赖。如果两个依赖包含同名同路径的类,Maven会使用首先声明的依赖中的类。
在实际项目开发中,特别是在微服务拆分过程中,为了保证服务的平滑过渡,可能会遇到多个JAR包中包含同名同路径类的情况。这时,就需要特别注意依赖的先后顺序。假设我们在做微服务拆分时,新旧服务同时存在于项目中,并且这两个服务中包含相同的类路径,这就可能会导致加载顺序的问题。
具体看以下例子,demo4项目是原工程,demo5项目为新项目。demo4,demo5中都包含org.demo4.api.User 类。
notion image
notion image
demo5项目的POM文件示例:
notion image
demo5中User类比demo4中的多了个字段
notion image
当运行程序时,会发现加载使用的是demo4中的User类。这是因为demo4-api先声明,所以其优先级高于后声明的demo5-api
notion image
为了让demo5中的User类优先加载,可以调整POM文件中依赖的顺序:
notion image
调整后,运行程序会使用demo5中的User类,从而解决依赖冲突问题。
POM文件的管理和依赖顺序需要Java开发人员特别注意,一不小心就可能会掉进坑里。通过正确管理POM文件中的依赖顺序,可以有效避免类加载冲突,确保项目的稳定性和可维护性。
一个解析EMQX日志的Python工具PVE虚拟机NAT配置详解
Loading...