处理的依赖性变动的良好做法是相同的应用程序设计良好做法。您希望对体系结构进行分层,并尽可能减少代码在每个依赖项上的广泛耦合,以便将更改隔离开来,以便升级依赖关系不会破坏应用程序的每个部分。接口并使业务逻辑与基础架构代码分离的代码。
对于小型升级(依赖的升级点发行),它可以帮助如果你有一个全面的单元测试,以检测由于API的变化故障。这是为什么它有时可以帮助编写看起来在表面上始终工作的简单测试的一个重要原因。一个例子是编写一个简单的JDBC单元测试来执行一个简单的查询。这看起来像是浪费了精力,直到在数据库升级后发生JDBC驱动程序的运行时问题(它发生在我身上)之前。对于较大的更改(例如像Spring之类的不兼容版本的框架之间的升级),如果您有一些自动化的功能或集成测试,或者至少有一个功能规范,您的QA人员可以运行以验证高级别功能。如果您正在升级的框架API不同,单元测试可能不再相关,需要进行大量的代码更改。
管理从一个版本的依赖到另一个不兼容的版本的实际策略部分实际上取决于你在做什么。成熟的图书馆将提供某种迁移路径,并希望不会要求您重写所有内容。将与框架升级相关的代码更改与实现新功能相关的更改分开是一个好主意。通过这种方式,如果出现问题,您将知道它与框架升级有关,而不是您在实现新功能时破坏的内容。
使这非常困难的部分原因是,在运行时,您的JVM中只能有一个特定依赖项的版本,因此您必须一次更新所有代码。 OSGi通过允许运行不同的OSGi包依赖于不同的依赖版本来解决这个特定的问题,所以你可以在运行时依赖于不同的依赖版本。这就是Eclipse如何在不破坏其他插件的情况下管理插件的依赖关系。
我明白你在说什么,但你正在掩盖这个问题。完全。 假设你处于这种情况之一,有哪些最佳实践? (或者每个人只是让Eclipse(也许m2eclipse)让你知道类不再存在,已经不再使用,等等...并从那里去?) 对于我的问题的第二部分,保持你的依赖有点到目前为止,如果您已经升级到具有'Securer X 2.0'功能的版本并减少了任何中断,那么您可以更容易地进行升级(或者不必要)。 –
我想说的最佳实践是:只有当您使用的依赖项版本变得明显时,才会更新您的依赖关系。让你的IDE告诉你什么时候某个东西被弃用或者不再存在,这就是它的存在。我不相信保持最新会阻止未来广泛的代码更改。这假设你的依赖关系发展的知识。你所能做的就是测试,测试,测试并最小化你对依赖关系的依赖。 – Joel