我正试图在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规则:
-
安装CodeNarc插件[grails安装插件CodeNarc]
-
在BuildConfig.groovy文件中添加以下行[了解详细配置]:
codenarc.propertiesFile = 'grails-app/conf/codenarc.properties'
-
在codenarc.properties-文件中,我添加了以下规则来忽略几个规则
codenarc.properties = { GrailsDomainHasEquals.enabled = false GrailsDomainHasToString.enabled = false EmptyMethod.enabled = false }
-
运行以下命令生成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/
您应该自定义适合您的团队/项目的规则集。除了"基本"规则集之外,其他提供的规则集都包含可能适合也可能不适合您的规则。
GrailDomainHasToString和grailDomainHasEquals规则就是完美的例子——许多组织禁用了这些规则。
有关关闭规则的更多信息,请参阅CodeNarc文档:
http://codenarc.sourceforge.net/codenarc-configuring-rules.html