2010-03-09 18 views
7

假设使用依赖管理工具(例如,Maven 2),寻找处理项目中主要依赖项升级的一些最佳实践。如何处理主要框架/依赖项升级?

具体地说,我感兴趣的是:

  • 如何获得继承应用起来对日期(例如,春1.2.x的到2.5.X)
  • 可以放什么做法纳入经过这样的检修以保持应用程序的最新状态

您自己的经验或任何您遇到/发现有用的文章/论文都是受欢迎的。

编辑: 更新依赖版本号是微不足道的。基于对依赖性的更改(弃用,删除,对参数/返回值中的类型的更改等),我更加关注如何处理需要做出的更改。如果在未来有一种好方法来缓解这些变化,那么保持依赖关系是最新的如果允许您保持更改并防止浪费大量时间以获得更安全的功能x 2.1'。

回答

1

根据我的经验,依赖项升级是由依赖项所拥有的必要功能实现的,作为对依赖项中的错误的修复,直接影响您自己的代码,支持新的Java版本或保留您的代码符合特定标准(关于影响安全性的依赖性)。如果你的代码不属于这些必要的领域之一,那么我就不会费心把它们保持在最新状态,而只是根据需要更新它们,因为从发布到发布的更新可能实际上会将错误引入到应用程序中。

我一直发现,最佳实践始于在应用程序中完成生产周期,将其作为稳定构建发布,并在下一次开发迭代中手动更新依赖项。在您的父POM中集中版本将导致最小的依赖版本修改和增加的可扩展性。假设你正在使用Maven:

<dependency> 
    <groupId>your.dep.group</groupId> 
    <artifactId>your-artifact-id</artifactId> 
    <version>${desiredVersion}</version> 
</dependency> 
+0

我明白你在说什么,但你正在掩盖这个问题。完全。 假设你处于这种情况之一,有哪些最佳实践? (或者每个人只是让Eclipse(也许m2eclipse)让你知道类不再存在,已经不再使用,等等...并从那里去?) 对于我的问题的第二部分,保持你的依赖有点到目前为止,如果您已经升级到具有'Securer X 2.0'功能的版本并减少了任何中断,那么您可以更容易地进行升级(或者不必要)。 –

+0

我想说的最佳实践是:只有当您使用的依赖项版本变得明显时,才会更新您的依赖关系。让你的IDE告诉你什么时候某个东西被弃用或者不再存在,这就是它的存在。我不相信保持最新会阻止未来广泛的代码更改。这假设你的依赖关系发展的知识。你所能做的就是测试,测试,测试并最小化你对依赖关系的依赖。 – Joel

1

处理的依赖性变动的良好做法是相同的应用程序设计良好做法。您希望对体系结构进行分层,并尽可能减少代码在每个依赖项上的广泛耦合,以便将更改隔离开来,以便升级依赖关系不会破坏应用程序的每个部分。接口并使业务逻辑与基础架构代码分离的代码。

对于小型升级(依赖的升级点发行),它可以帮助如果你有一个全面的单元测试,以检测由于API的变化故障。这是为什么它有时可以帮助编写看起来在表面上始终工作的简单测试的一个重要原因。一个例子是编写一个简单的JDBC单元测试来执行一个简单的查询。这看起来像是浪费了精力,直到在数据库升级后发生JDBC驱动程序的运行时问题(它发生在我身上)之前。对于较大的更改(例如像Spring之类的不兼容版本的框架之间的升级),如果您有一些自动化的功能或集成测试,或者至少有一个功能规范,您的QA人员可以运行以验证高级别功能。如果您正在升级的框架API不同,单元测试可能不再相关,需要进行大量的代码更改。

管理从一个版本的依赖到另一个不兼容的版本的实际策略部分实际上取决于你在做什么。成熟的图书馆将提供某种迁移路径,并希望不会要求您重写所有内容。将与框架升级相关的代码更改与实现新功能相关的更改分开是一个好主意。通过这种方式,如果出现问题,您将知道它与框架升级有关,而不是您在实现新功能时破坏的内容。

使这非常困难的部分原因是,在运行时,您的JVM中只能有一个特定依赖项的版本,因此您必须一次更新所有代码。 OSGi通过允许运行不同的OSGi包依赖于不同的依赖版本来解决这个特定的问题,所以你可以在运行时依赖于不同的依赖版本。这就是Eclipse如何在不破坏其他插件的情况下管理插件的依赖关系。