基本上我有包...
com.me.application
com.me.application.thing
com.me.library
我想执行的规则,没有什么com.me.application
可以包括com.me.library
,除了在东西com.me.application.thing
。
这是可能在Java代码时,Maven,类路径,或Java的任何其他层将大致等价于C连接的水平?
基本上我有包...
com.me.application
com.me.application.thing
com.me.library
我想执行的规则,没有什么com.me.application
可以包括com.me.library
,除了在东西com.me.application.thing
。
这是可能在Java代码时,Maven,类路径,或Java的任何其他层将大致等价于C连接的水平?
我能想到的唯一方法是通过AspectJ的 。
AspectJ是一个方面取向的语言,用来通过单独的编译过程,以横切关注添加到你的应用。 一个AspectJ的经典用途之一是政策执行,这适合您的方案。
基本上你宣布从包里面的代码可以被调用,当你遇到一个方法调用(或在您的情况下,变量声明)违反这些规则抛出编译错误决定的规则。 你可以学习的细节的优秀图书的AspectJ在行动
AspectJ中可以很好地集成到一个Maven通过建立AspectJ的插件
如果你用AspectJ只执行政策的,你不会有任何额外的运行时依赖,因为你的字节代码将不会被修改。
而不是试图强制编译器做,为什么不使用源代码分析呢?
我会建议使用的架构规则引擎是现在嵌在声纳 。 与此相结合构建断路器插件,你可以触发一个构建失败,如果开发商违反您的层次结构的规则。
您可以强制与Checkstyle的的支票进口管制规则。 配置的Maven插件Checkstyle的进入你的pom.xml,任何违规行为可以被设置为使构建失败。
您将需要通过独立的Maven项目,每建一个jar文件建立com.me.application,com.me.application.thing和com.me.library。 对于com.me.application聚甲醛将不包括依赖性com.me.library,并com.me.application.thing将包括com.me.library依赖的POM。
但是,这是一个奇怪的封装结构。 你为什么要阻止呢?