代码之家  ›  专栏  ›  技术社区  ›  Rorschach

当新版本发布时,如何避免对Maven项目进行重大更改

  •  0
  • Rorschach  · 技术社区  · 7 年前

    具体背景

    自从我更改pom文件后,这个问题就出现了。

    Maven安装失败,因为“找不到symbol…class GraphRepository”

    广泛的问题:

    如果我将给定项目上的maven依赖项从某个版本更新到另一个版本,并且我一直在大量使用的一个类现在会给出大约100个错误代码,表示整个类现在都缺失了。。。我怎么能不发生这种事呢。

    具体到我认为我在哪里

    我将不得不删除所有对“GraphRepository”的引用,并将其更改为Neo4jRepository,因为“还要注意,GraphRepository已被弃用,并被Neo4jRepository取代”- Neo4j 4.2 graph repo save method is now ambiguous

    但是,这似乎并不正确。我真的需要经历整个项目并更改所有代码才能更新吗?

    [ERROR] /.../service/SupportModelServiceImpl.java:[10,49] cannot find symbol symbol: class GraphRepository location: package org.springframework.data.neo4j.repository

    2 回复  |  直到 7 年前
        1
  •  1
  •   toongeorges    7 年前

    您无法阻止外部依赖引入破坏性更改。但是,您可以编写代码,以使更新外部依赖项所需的工作量最小。

    我观察到,在实践中,对依赖关系并没有给予太多关注,就好像它们是免费的一样。最初它们就像免费的一样,但一旦你开始堆叠依赖项,并且存在冲突的可传递依赖项,或者你升级到一个新版本,并进行了破坏性的更改,就会产生维护成本。我看到过这样的项目,依赖网络是如此复杂,如果不是为了管理层不理解技术债务的概念,他们应该从头开始完全重写,生活在一种错觉中,即维护现有(坏)版本的软件比编写新版本要便宜。

    您必须防范外部依赖的唯一选择是以某种方式封装它们。这可能涉及一些锅炉板代码,但如果这个锅炉板代码是最小的,那么可能很值得付出努力。

    Insulating dependencies

    您无法控制的外部代码以红色显示。如果您不考虑构建代码,您的代码(橙色)将直接依赖于外部代码,并面临外部更改的风险。您可以尝试编写对外部代码没有依赖性的代码(绿色)。实现这一点的方法是在自己的界面中定义所需的外部功能。然后,您有一些实现这些接口并具有外部依赖关系的代码(橙色)。您可以通过依赖项注入框架注入具有外部依赖项的代码。

        2
  •  1
  •   awd    7 年前

    但是我不明白你为什么想要这样,一个主要的版本更改(例如4.xx到5.xx)意味着一些东西将要崩溃,你将不得不对你的代码进行更改。