簡體   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