在Java构建系统中对包依赖关系实施限制的可能性有哪些?例如,不应允许myapp.server.bl.Customer
类引用myapp.client.ui.customlayout
包。
我对基于Ant或IDE的解决方案感兴趣。
我想在构建中收到一条错误消息,指出违反了(自定义)程序包依赖关系规则并且构建已中止。我还想在Ant脚本或IDE项目文件之外的列表中维护依赖项,最好是在文本文件中。
(我不知道Maven,但我在这里读到它对模块依赖管理有更好的支持)
答案 0 :(得分:7)
我相信Checkstyle有一个检查。 它被称为Import Control
答案 1 :(得分:6)
您可以配置Eclipse项目以指定访问规则。访问规则可以使用通配符规则指定“禁止”,“不鼓励”和“可访问”级别。然后,您可以将Discouraged或Forbidden的违规配置在构建期间标记为警告或错误。
关于这个想法的一篇旧文章(细节可能已经过时):
http://www.eclipsezone.com/eclipse/forums/t53736.html
如果你正在使用Eclipse(或OSGi)插件,那么插件/模块的“公共”部分是明确定义的,这是模型的一部分。
答案 2 :(得分:3)
ivy似乎是解决问题的好方法(如果您使用的是蚂蚁)。 Ivy是Ant的官方依赖管理组件,因此可以很好地与ant集成。它能够解决依赖关系,处理冲突,创建排除等等。
它使用简单的xml结构来描述依赖项,并且比Maven更容易使用,因为它只试图解决依赖项解析问题。
来自常春藤主页:
Ivy是一个管理(记录,跟踪,解决和报告)项目依赖项的工具。它的特点如下:
答案 3 :(得分:3)
对于IDE特定的解决方案,IntelliJ IDEA有一个依赖性分析工具,允许用户定义无效的依赖关系。 http://www.jetbrains.com/idea/webhelp2/dependency-validation-dialog.html
在编译和实时编辑依赖类时,将显示依赖项违规(如右侧错误栏中的错误/警告条纹)。
使用JetBrains的TeamCity构建服务器可以获得更多自动化,可以运行检查构建并报告上述配置的检查。
对于另一个独立于IDE的解决方案,AspectJ可用于声明无效的依赖项(并在构建过程中集成该步骤,以获取问题的警告/错误信息)。
答案 4 :(得分:1)
Eclipse通过Build Path属性/ jar属性支持此功能。我认为它可能只适用于jar /项目边界。
答案 5 :(得分:1)
也许可以使用 Classsycle : http://classycle.sourceforge.net/ddf.html
答案 6 :(得分:0)
您可以在IDEA或Maven中使用多个模块,也可以在Eclipse和Gradle中使用多个项目。在所有情况下,这个概念都是一样的。
一个简单的解释是 myapp.server.bl 的模块和 myapp.client.ui.customlayout 的另一个模块,它们之间没有编译时依赖关系。现在,任何针对相反模块/项目编译代码或代码完成的尝试都将失败。
要审核问题的广泛程度,IntelliJ IDEA的一个有用的起点是分析依赖关系:
http://www.jetbrains.com/idea/webhelp/analyzing-dependencies.html
从该文章中,您可以了解如何运行和执行项目的依赖性分析。