繁体   English   中英

使用 Spring 时,如何抑制 checkstyle 消息“Utility classes should not have a public of default constructor”

[英]How can I supress the checkstyle message "Utility classes should not have a public of default constructor" when using Spring

在 Spring Java 项目中,我有以下类:

@SuppressWarnings({"PMD", "Checkstyle"})
@SpringBootApplication
public class ToolBoxApplication {

    public static void main(final String[] args) {
        SpringApplication.run(ToolBoxApplication.class, args);
    }
}

使用 Jenkins 构建告诉我,我不应该在实用程序类中有公共或默认构造函数。

在我的带有 Treewalker 文件的 checkstyle.xml 中

<!-- Make the @SuppressWarnings annotations available to Checkstyle -->
<module name="SuppressWarningsHolder" />

和模块

我试图使用

@SuppressWarnings({"PMD", "checkstyle:HideUtilityClassConstructor"})

但这也不起作用。 “PMD”抑制确实有效(它有效地报告了相同的错误)。

抑制时需要以小写形式指定 checkstyle 名称。 这会做

@SuppressWarnings({"PMD", "checkstyle:hideutilityclassconstructor"})

我们有多个 spring boot 应用程序,因此我们没有添加多个@SuppressWarnings注释,而是配置了一个 checkstyle 抑制过滤器并添加了以下抑制:

<!-- Spring Boot Application files get detected as utility classes and checkstyle wants them to have a private constructor, but a constructor is required to run the application. By convention application classes end with *Application -->
<suppress checks="HideUtilityClassConstructor" files=".*Application.java"/>

您也可以添加一个虚拟方法来避免该规则:

public void foo() {
    throw new UnsupportedOperationException();
}

对于特定类,这可以优雅地处理。 由于 SpringBoot 需要此类来启动应用程序,因此它不会有任何其他方法,使其看起来像一个实用程序类。

config/checkstyle文件夹中的suppressions.xml中添加以下行。 由于您仅针对特定文件排除它,因此这是一个很好的解决方案

 <suppress files="ToolBoxApplication.java"  checks="HideUtilityClassConstructor" />

如果您没有 suppressions.xml 文件,则创建一个。 它看起来像下面。 (理想情况下不应该有很多压制)

<?xml version="1.0"?>

<!DOCTYPE suppressions PUBLIC
        "-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
        "https://checkstyle.org/dtds/suppressions_1_2.dtd">
<suppressions>
    <suppress files="." checks="JavadocMethod"/>
    <suppress files="." checks="JavadocPackage"/>
    <suppress files="." checks="JavadocVariable"/>
    <suppress files="." checks="MissingJavadocMethod"/>
    <suppress files="." checks="JavadocPackage"/>
    <suppress files="ConversionProxyApplication.java"  checks="HideUtilityClassConstructor" />
</suppressions>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM