grails CodeNarc和服务无状态规则集



我正试图在grails项目上使用codeNarc,在安装并运行它之后,我收到了一些违反规则集的消息,我想了解并解决这些消息。第一个关注点是"GrailsStatelessService",第二个是"equals()和toString()"方法。。。

对于第一个"GrailsStatelessService",我收到的消息是:

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

我已经搜索了一些,但没有发现很多关于这方面的技巧。有人能向我解释一下这个规则集的真正含义,以及我必须做些什么来解决这个问题/吗

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

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

我发现GrailsStatelessService规则有时确实会捕获到真正的冲突,所以我没有禁用它,而是修改它以忽略我常用的字段名。

BuildConfig.groovy:

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

codenarc.properties:

GrailsStatelessService.addToIgnoreFieldNames=grailsApplication,applicationContext,sessionFactory

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

  1. 安装CodeNarc插件[grails安装插件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

有时候condenarc会把事情搞混。在服务名称的末尾添加Service可以消除这个"问题",如果你没有将类作为无状态使用,但codenarc认为是这样

private CurrencyConverterFactory currencyConverterFactory

我修复了:

private CurrencyConverterFactory currencyConverterFactoryService

我希望这能帮助到别人。

文档很好地解释了这个规则:

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

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

如果您正在使用Grails CodeNarc插件,请参阅插件文档以获取默认包含的CodeNarc规则集的列表。还有一节是关于"配置CodeNarc规则集文件"的,所以无论如何都要创建自己的自定义规则集。

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

您应该自定义适合您的团队/项目的规则集。除了"基本"规则集之外,其他提供的规则集都包含可能适合也可能不适合您的规则。

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

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

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

最新更新