我有一个基本上由 2 个模块组成的项目。我有一个Eclipse工作区和2个Java项目(maven),它们代表了这两个模块。
更深入一点:
- 项目1:核心模块(具有核心实现和API接口)
- 项目2:辅助模块(服务器)
项目2需要将项目 1作为依赖项,以便在编译时访问 API 接口。但问题是项目1需要项目 2才能正常工作(不过这只是运行时要求)。
因此,当我在每个项目中添加另一个项目作为依赖项时,会显示循环依赖项错误,因为 Eclipse 不知道以哪个顺序编译类。
我设法完成这项工作的方法是,我将项目 2 中的"bin"文件夹作为依赖项添加到项目1以及所有项目 2依赖项(基于 maven)。不过,这使得整个项目完全绑定到我的系统,因为所有路径都根据我的计算机设置进行了调整。
有没有正确的方法可以将另一个项目指定为仅依赖于"运行时",而不是依赖于"编译"并避免 Eclipse 中的循环冗余?
以更直观的方式解释。我需要的是:
项目2--- 编译期间取决于项目 1--->
项目 1--- 运行时取决于项目 2--->
Eclipse 可以处理循环项目依赖关系,但默认情况下,循环依赖关系将报告为错误,原因充分(将代码拆分为具有循环依赖关系的项目是没有意义的)。
可以将两个项目的循环依赖项项目问题严重性从">错误"降低到"警告",如下所示(不推荐):
- 在"项目>属性:Java 编译器>生成">
- 中,选中"启用项目特定设置"复选框,然后
- 在">生成路径问题"部分中,为">循环依赖项"选择">警告"而不是"错误 "
在 Maven 中,依赖项有一个作用域。它们可以声明为"编译"、"运行时"、"测试"等。
可以在项目 2 中声明对项目 1 的编译依赖项,在项目 2 上声明对项目 1 的运行时依赖项。我从未尝试过以这种方式定义依赖项,但它可能会起作用。
但是,更重要的是:如果没有Project2就无法使用Project1,反之亦然,为什么它们是不同的项目?
因此,根据@JF-Meier的评论,我找到了另一种方法来完成这项工作。整个想法基本上是将项目 2 松散地耦合到项目 1,以允许项目2与其他实现交换,同时仍然是项目 1工作的重要组成部分。
为了解决循环依赖问题,我刚刚创建了另一个项目,该项目将项目 1 和项目2设置为依赖项,然后从那里启动项目 1。这为我解决了循环依赖问题,一切正常。
结果:
项目- 0:启动器以启动项目 1
- 项目1:核心模块(具有核心实现和API接口)
- 项目2:辅助模块(服务器)
和依赖关系:
项目 1--- 什么都不依赖
项目2---取决于项目 1--->
项目0---取决于项目1和项目 2--->
像这样,我可以从项目0启动项目 1,同时将项目 2 放在类路径上(因此项目 1 可以根据需要找到项目 2)。
我将@howlger的回复标记为已接受,因为它也解决了我的问题。但是,如果我的问题不太容易理解,我在这里提出我最终如何解决它,以防它可能对像我一样试图实现相同目标的其他人有所帮助。
感谢一如既往的所有帮助!