【问题标题】:Restrict dependencies between Java packages限制 Java 包之间的依赖关系
【发布时间】:2010-09-14 00:56:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: java build-process dependency-management


    【解决方案1】:

    我相信 Checkstyle 对此有一个检查。 它叫Import Control

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        来自常春藤主页:

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

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

        【讨论】:

          【解决方案4】:

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

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

          使用 JetBrains 的 TeamCity 构建服务器可以获得更多的自动化,它可以运行检查构建并报告上述配置的检查。

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

          【讨论】:

            【解决方案5】:

            Eclipse 通过构建路径属性/jar 属性对此提供了支持。我认为它可能只适用于 jar / 项目边界。

            【讨论】:

              【解决方案6】:

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

              【讨论】:

                【解决方案7】:

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

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

                要审核问题的广泛程度,IntelliJ IDEA 的一个有用起点是分析依赖关系

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

                从那篇文章中,您可以了解如何为您的项目运行和执行依赖项分析。

                【讨论】:

                  猜你喜欢
                  • 2016-08-20
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-09-18
                  • 1970-01-01
                  • 2016-09-10
                  • 2010-11-18
                  • 1970-01-01
                  相关资源
                  最近更新 更多