【问题标题】:It is possible to specify the classes/module where a dependency can be used?可以指定可以使用依赖项的类/模块吗?
【发布时间】:2016-07-25 15:30:11
【问题描述】:
情况:我正面临一个组件,其中包含仍然使用 Spring 1.2.6 的旧代码。该组件很关键,不能更改。这个旧的 Spring 版本包含一个 query() 方法,在 Spring 2.x.x 中是 edited。在我的其余代码中,我想使用更新版本的 Spring(例如 Spring 2.5.6)。
目标:我想指定我这个旧的 query() 方法只能在组件中使用,所以其他代码不会被这个打扰。可以指定可以使用依赖项的类/模块吗?
提前致谢!
【问题讨论】:
标签:
java
maven
dependencies
version
dependency-management
【解决方案1】:
据我所知,这是不可能的,因为您将库加载到同一个类加载器中,所以当对象已经存在时,所有对象都将被重载。
例如,您(或组件)加载 Spring 1.2.6 以便组件可以使用它,而您实际上尝试加载 2.5.6 会使其过载,这意味着 1.2.6 已卸载,而 2.5 .6 代替。
解决这个问题的一种方法是在两个类加载器中加载 Spring-Versions(参见 this Question)或者当 Spring 确实支持它时(这是不寻常的并且很可能不是这种情况 - 抱歉,不熟悉 Spring ),两个版本是否有不同的包。因为它们位于不同的包中,所以类加载器不会重载对象,因为它们具有不同的“路径”(完整包 + 对象名称 + .java)。