当前位置: 首页 > 面试题库 >

Checkstyle规则,用于限制根软件包之间的交互(使用ImportControl?)

司徒瀚
2023-03-14
问题内容

如何创建Checkstyle规则来限制不同根包之间的交互?

我有以下3个根软件包:

  • models
  • views
  • controllers

(它们 不是 类似的东西com.mycompany.myproject.models。它们是 根包 。)

我想禁止访问从modelsviewsviewsmodels(和其他一些)。

我尝试使用Checkstyle 的ImportControl-
Checker

  • 尝试1:使用一个import-control.xml。问题:我只能提供一个Root-XML-Element(<import-control pkg="models">),并且它只包含一个Package(但是我想拥有多个)。
  • 尝试2:使用多个import-control.xml。问题:如果我在中导入多个checkstyle-config.xml,似乎都不起作用(没有错误,就好像我都没有定义)。我的定义import-control.xml
    <module name="ImportControl">
    





问题答案:

不幸的是,要使用开箱即用的ImportControl复选框很难做到。
原因如下:

您已经发现了为什么选项1无法使用的原因:只能有一个根软件包。

选项2是可行的,但很费力。让我深入一点。我使用了以下两个导入控制文件,它们不允许使用modelsfrom viewsviewsfrom
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实例限制为各自的文件。这也将消除 “导入控制文件无法处理此html" target="_blank">程序包” 消息。


 类似资料:
  • 我有两个组件A和B,其中组件A包含一个按钮。我希望当用户点击这个按钮时,在组件B上启动一个功能 组件 B 使用路由渲染。我正在考虑使用带有可观察布尔值的服务,该布尔值指示是否单击了 A 中的按钮。这是实现它的正确方法吗?

  • 问题内容: 我由大约40个开发人员组成的团队工作,我不希望任何开发人员使用任何开发人员都可以使用的特定API(准确地说是java.sun.Base64),而是让他们使用sun API的替代方法作为其专有。 是否有用于maven的插件,通过这些插件在pom.xml中指定受限制的软件包,如果在代码中的任何位置使用了这些软件包中的任何一个,则构建将中断? 还是有一种更优雅的方式来做到这一点? 谢谢 问题

  • Drools文档提到,规则可以使用诸如生效日期和过期日期之类的属性来指定绝对规则有效期。 例如 Drools还支持周期性重复的规则,间隔为,cron为,但这意味着规则是在这样的点触发的。 我很感兴趣,如果有任何选项如何指定定期可用(不解雇)的规则与时间限制。例如,让我们想象一些公司的营业时间-操作只能在正式工作期间执行,但不能在下班后执行。 我想要这样的东西,但这不是Drools的有效规则 是否可

  • 在所有属于office支持库的控件中都可以调用com对象来完善功能,那在这些控件中如何调用com对象呢? 首先新建“易语言”我们以word支持库为例,在窗体上放入word程序集和word文档集 我们写入如下代码,把两个组件联系起来 这时,我们查看word文档集的命令中有“取某某对象”的命令,这些命令的返回值就是一个对象,使用这些命令的时候必须先创建一个对象类型的变量来保存这些命令的返回值。 这时一

  • 也许有一个特殊的插件为这个特殊的情况? 提前致谢

  • 我想限制用户最多上传4张图片。存储规则可以限制特定节点中的子节点数量?这是我的储物规则,没有儿童限制。 提前感谢