10

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

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

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

4

7 回答 7

7

我相信 Checkstyle 有一个检查。它被称为进口控制

于 2008-09-29T16:43:31.213 回答
6

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

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

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

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

于 2008-09-29T17:02:01.853 回答
3

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

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

从常春藤主页:

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

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

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

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

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

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

于 2008-09-30T03:00:55.893 回答
1

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

于 2008-09-29T16:49:06.723 回答
1

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

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

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

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

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

于 2010-03-25T13:27:39.887 回答
1

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

于 2011-09-19T10:59:35.380 回答