不幸的是,要使用开箱即用的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
该子类添加用于启用/禁用 “导入控制文件无法处理此程序包” 消息的选项,否则请使用选项2。 - 如果使用的是Eclipse,则还有第三个解决方案。您可以使用Checkstyle Eclipse插件提供的高级配置对话框,以将importControl实例限制为各自的文件。这也将消除 “导入控制文件无法处理此程序包” 消息。



