构建过程 - 限制 Java 包之间的依赖关系



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

我想在构建中收到一条错误消息,指示已违反(自定义)包依赖项规则并且构建中止。我还想在 Ant 脚本或 IDE 项目文件之外的列表中维护依赖项,最好是在文本文件中。

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

我相信Checkstyle对此进行了检查。它被称为导入控制

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

有点像一篇关于这个想法的旧文章(细节可能已经过时):

http://www.eclipsezone.com/eclipse/forums/t53736.html

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

ivy 似乎是解决您问题的好方法(如果您使用的是 ant)。常春藤是蚂蚁的官方依赖管理组件,因此与蚂蚁很好地集成在一起。它能够解决依赖关系、处理冲突、创建排除项等。

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

从常春藤主页:

Ivy是用于管理(记录,跟踪,解析和报告)项目依赖关系的工具。它的特点如下:

  1. 灵活性和可配置性 - Ivy本质上与流程无关,与任何方法或结构无关。相反,它提供了必要的灵活性和可配置性,以适应广泛的依赖关系管理和构建过程。
  2. 与 Apache Ant 紧密集成 - 虽然作为独立工具提供,但 Ivy 与 Apache Ant 配合得特别好,提供了许多强大的 Ant 任务,从依赖关系解析到依赖关系报告和发布。

对于特定于IDE的解决方案,IntelliJ IDEA有一个依赖分析工具,也允许人们定义无效的依赖关系。http://www.jetbrains.com/idea/webhelp2/dependency-validation-dialog.html

在编译和实时时,在编辑依赖类时都会显示依赖冲突(作为右侧错误栏中的错误/警告条带)。

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

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

Eclipse 通过 Build Path 属性/jar 属性对此提供支持。我认为它可能只适用于罐子/项目边界。

也许可以使用 Classsycle:http://classycle.sourceforge.net/ddf.html

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

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

为了审核问题已经有多广泛,IntelliJ IDEA 的一个有用的起点是分析依赖关系

http://www.jetbrains.com/idea/webhelp/analyzing-dependencies.html

从该文章中,您可以看到如何运行和操作项目的依赖项分析。

相关内容

  • 没有找到相关文章

最新更新