如何创建Checkstyle规则来限制不同根包之间的交互?
我有以下3个根软件包:
models
views
controllers
(它们 不是 类似的东西com.mycompany.myproject.models。它们是 根包 。)
com.mycompany.myproject.models
我想禁止访问从models到views和views到models(和其他一些)。
我尝试使用Checkstyle 的ImportControl- Checker:
import-control.xml
<import-control pkg="models">
checkstyle-config.xml
<module name="ImportControl">
不幸的是,要使用开箱即用的ImportControl复选框很难做到。 原因如下:
您已经发现了为什么选项1无法使用的原因:只能有一个根软件包。
选项2是可行的,但很费力。让我深入一点。我使用了以下两个导入控制文件,它们不允许使用modelsfrom views和viewsfrom models:
<!DOCTYPE import-control PUBLIC "-//Puppy Crawl//DTD Import Control 1.1//EN" "http://www.puppycrawl.com/dtds/import_control_1_1.dtd"> <import-control pkg="views"> <allow pkg="views" /> <disallow pkg="models" /> </import-control> <!DOCTYPE import-control PUBLIC "-//Puppy Crawl//DTD Import Control 1.1//EN" "http://www.puppycrawl.com/dtds/import_control_1_1.dtd"> <import-control pkg="models"> <allow pkg="models" /> <disallow pkg="views" /> </import-control>
在我的测试设置中,这基本上可以工作,但是有一个缺点:每个类都会收到Checkstyle警告,表明 Import控制文件无法处理此包 。这是因为ImportControl检查期望所有程序包都驻留在公共根目录下(通过查看Checkstyle 5.6源进行了验证)。因此,在models程序包中,您会从为views程序包配置的检查实例中得到警告,反之亦然。 还存在一个额外的问题,即ImportControl检查仅适用于import语句,但是找不到直接在代码中使用的完全限定的引用。
所以,你可以做什么?
ImportControlCheck