具体背景
我刚刚从spring数据neo4j 4.1.3切换到了5.0.0
自从我更改pom文件以来,就出现了这个问题。
Maven安装失败,因为“无法找到符号...类GraphRepository”
我是Java Maven项目整体上的新手
广泛的问题:
如果我将给定项目上的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
最佳答案
您不能阻止外部依赖项引入重大更改。但是,您可以编写代码,以便花费最少的精力来更新外部依赖项。
我观察到在实践中,对依赖项的关注并不多,就好像它们是自由的一样。最初,它们与免费一样好,但是一旦您开始堆叠依赖项并具有可传递的依赖项发生冲突,或者您通过重大更改升级到新版本时,将产生维护成本。我见过一些项目,这些项目的依赖项网络是如此复杂,以至于如果不是出于管理层不理解技术债务概念的考虑,它们应该从头彻底重写,而生活在这样一个幻想中:维护现有(不良)软件版本的成本更低而不是写一个新的。
您必须防止外部依赖项的唯一选择是以一种或另一种方式封装它们。这可能涉及一些样板代码,尽管如果该样板代码很小,那么值得付出努力。
因为我看到了具有可怕依赖关系的项目,所以我对它进行了一些思考,以了解如何防止这种依赖关系混乱并制作了以下图像:
您无法控制的外部代码为红色。如果您不考虑结构化代码,则您的代码(橙色)将直接取决于外部代码,并且存在外部更改的风险。您可以尝试编写不依赖于外部代码的代码(绿色)。实现此目的的方法是在自己的界面中定义所需的外部功能。然后,您将具有实现这些接口并具有外部依赖性的一些代码(橙色)。您可以通过依赖项注入框架注入具有外部依赖项的代码。
这种方法将外部更改的影响限制为仅橙色代码。但是,与直接在代码中的各处直接使用依赖关系相比,它需要更多的计划。而且,由于更多的计划意味着更多的努力,因此通常不会付诸实践。