限制Java包之间的依赖关系

限制Java包之间的依赖关系,java,build-process,dependency-management,Java,Build Process,Dependency Management,在Java构建系统中对包依赖项实施限制的可能性有哪些?例如,不应允许myapp.server.bl.Customer类引用myapp.client.ui.customlayout包。 我对基于Ant或特定于IDE的解决方案感兴趣 我希望在生成中得到一条错误消息,指示违反了(自定义)包依赖项规则,生成被中止。我还希望在一个列表中维护依赖关系,最好是在一个文本文件中,在Ant脚本或IDE项目文件之外 (我不知道Maven,但我在这里读过它,它对模块依赖关系管理有更好的支持)我相信Checkstyle

在Java构建系统中对包依赖项实施限制的可能性有哪些?例如,不应允许
myapp.server.bl.Customer
类引用
myapp.client.ui.customlayout
包。 我对基于Ant或特定于IDE的解决方案感兴趣

我希望在生成中得到一条错误消息,指示违反了(自定义)包依赖项规则,生成被中止。我还希望在一个列表中维护依赖关系,最好是在一个文本文件中,在Ant脚本或IDE项目文件之外


(我不知道Maven,但我在这里读过它,它对模块依赖关系管理有更好的支持)

我相信Checkstyle对此有一个检查。
它被称为

Eclipse通过构建路径属性/jar属性支持这一点。我认为它可能只能跨jar/项目边界工作。

您可以配置Eclipse项目来指定访问规则。访问规则可以使用通配符规则指定“禁止”、“不鼓励”和“可访问”级别。然后,您可以在生成期间将不鼓励或禁止的冲突配置为标记为警告或错误

这是一篇关于这个想法的老文章(细节可能已经过时):

如果您使用的是Eclipse(或OSGi)插件,那么插件/模块的“公共”部分是显式定义的,这是模型的一部分。

似乎是解决问题的好办法(如果您使用的是ant)。Ivy是Ant的官方依赖管理组件,因此与Ant很好地集成。它能够解决依赖关系、处理冲突、创建排除等

它使用一个简单的xml结构来描述依赖关系,并且比Maven更易于使用,因为它只尝试解决依赖关系解析问题

从常春藤主页:

Ivy是管理(记录、跟踪、解决和报告)项目依赖关系的工具。其特点如下:

  • 灵活性和可配置性——Ivy本质上是流程不可知的,不依赖于任何方法或结构。相反,它提供了必要的灵活性和可配置性,以适应广泛的依赖关系管理和构建过程
  • 与ApacheAnt紧密集成—Ivy作为一个独立的工具提供,但与ApacheAnt的配合尤其出色,它提供了许多功能强大的Ant任务,从依赖项解析到依赖项报告和发布

  • 对于特定于IDE的解决方案,IntelliJ IDEA有一个依赖项分析工具,允许定义无效的依赖项。

    在编译和实时编辑依赖类时(在右侧错误栏中显示为错误/警告条),将显示依赖性冲突

    JetBrains的TeamCity构建服务器可以实现更高的自动化,它可以运行检查构建并报告上述配置的检查


    对于另一个独立于IDE的解决方案,AspectJ可用于声明无效的依赖项(并在构建过程中集成该步骤,以获取问题的警告/错误信息)。

    您可以在IDEA或Maven中使用多个模块,也可以在Eclipse和Gradle中使用多个项目。这一概念在所有情况下都是相同的

    一个简单的解释是一个用于myapp.server.bl的模块和另一个用于myapp.client.ui.customlayout的模块,两者之间没有编译时依赖关系。现在,任何针对相反模块/项目编译代码或完成代码的尝试都将按预期失败

    为了检查问题的严重程度,IntelliJ IDEA的一个有用的起点是分析依赖关系:


    从这篇文章中,您可以看到如何运行项目的依赖性分析并对其采取行动。

    也许可以使用Classsycle