3

我正在尝试codeNarc在 grails 项目上使用,在安装并运行它之后,我有一些我想理解和解决的规则集违规消息。第一个关注“GrailsS​​tatelessService”,第二个关注“equals() 和 toString()”方法......

对于第一个“GrailsS​​tatelessService”,我收到的消息是:

***************************
Violation in class app.TheServiceName. The class is marked as stateless but contains the non-final field 'aVariableName'
***************************

我已经对此进行了一些搜索,但没有找到很多关于此的技巧。有人可以解释一下这个规则集的真正含义以及我必须做些什么来解决这个问题/

关于第二种规则集,我在某处发现它通过覆盖所有域类中的这些方法来解决,但这是一种义务、一种需要,还是我只需要修改规则集文件以避免与这些规则集相关的那些类型的消息?

这引入了我的最后一个问题:在哪里可以找到这个规则集文件(codenarc 中的默认文件)或我必须包括我自己的那个?

4

5 回答 5

4

我发现该GrailsStatelessService规则有时确实会发现真正的违规行为,因此我没有禁用它,而是对其进行了修改以忽略我常用的字段名称。

BuildConfig.groovy:

codenarc.propertiesFile = 'grails-app/conf/codenarc.properties'

codenarc.properties:

GrailsStatelessService.addToIgnoreFieldNames=grailsApplication,applicationContext,sessionFactory
于 2012-02-07T23:21:27.083 回答
3

我可以按如下方式配置此 CodeNarc 规则:

  1. 安装 CodeNarc 插件 [ grails install-plugin codenarc ]

  2. 在BuildConfig.groovy文件中添加以下行[详细配置]:

    codenarc.propertiesFile = 'grails-app/conf/codenarc.properties'
    
  3. codenarc.properties - 文件中,我添加了以下规则以忽略一些规则

    codenarc.properties = {
    
      GrailsDomainHasEquals.enabled = false
    
      GrailsDomainHasToString.enabled = false
    
      EmptyMethod.enabled = false
    
    }
    
  4. 运行以下命令生成 CodeNarc 报告:grails codenarc

于 2012-12-11T15:40:27.563 回答
2

有时 condenarc 会把事情搞混。如果您没有将类用作无状态类但 codenarc 认为如此,则在服务名称的末尾添加 Service 会删除此“问题”。我对这项服务有这个问题:

private CurrencyConverterFactory currencyConverterFactory

我修复了:

private CurrencyConverterFactory currencyConverterFactoryService

我希望这可以帮助别人。

于 2019-02-05T16:06:55.813 回答
1

文档很好地解释了该规则:

检查 Grails 服务类上的非最终字段。Grails 服务类默认是单例的,因此它们应该是可重入的。在大多数情况下,这意味着(或至少鼓励)它们应该是无国籍的。

此规则忽略最终字段(实例或静态)。但是,静态和非最终字段确实会导致违规。

于 2012-02-07T12:36:34.080 回答
0

如果您使用的是Grails CodeNarc 插件,请参阅插件文档以获取默认包含的CodeNarc规则集列表。还有一个关于“配置 CodeNarc 规则集文件”的部分——所以一定要创建你自己的自定义规则集。

http://www.grails.org/plugin/codenarc/

希望您自定义适合您的团队/项目的规则集。除了“基本”规则集,其他提供的规则集都包含可能适合或不适合您的规则。

GrailsDomainHasToString和GrailsDomainHasEquals规则就是完美的例子——许多组织禁用了这些规则。

有关关闭规则的更多信息,请参阅CodeNarc文档:

http://codenarc.sourceforge.net/codenarc-configuring-rules.html

于 2012-02-07T18:31:02.967 回答