如何抑制PMD中的违规行为?

How to suppress violations in PMD?

当我 运行 PMD 分析时,我收到违规:

Each class should declare at least one constructor

此违规行为发生在 Spring 控制器上。此控制器由 Spring 实例化,因此我不需要调用此 class.

忽略此违规行为的推荐方法是什么?

根据 this doc 可以使用 //NOPMD 但我只想忽略特定的违规行为。

PMD 还支持@SuppressWarnings 注解:

// This will suppress all the PMD warnings in this class
@SuppressWarnings("PMD")
public class Bar {
 void bar() {
  int foo;
 }
}

或者只有一种类型的警告:

// This will suppress UnusedLocalVariable warnings in this class
@SuppressWarnings("PMD.UnusedLocalVariable")
public class Bar {
 void bar() {
  int foo;
 }
}

您可能还想了解的是 creating a ruleset and exclusions。也许您想禁用某个规则,或从 PMD 检查中排除某些文件。

在我的组织中,我使用 POM 文件中的 PMD 忽略选项来抑制为我们 auto-generate 的客户端存根(并保存在单独的模块中)生成的所有警告,因为它们是第三方 client-stubs 我们不倾向于触摸它们,认为有任何警告或违规行为,我假设您和我们一样。

下面是来自 POM 文件的片段,其中包含客户端存根模块

<build>
    <plugins>
        <plugin>
            <!-- <groupId>org.apache.maven.plugins</groupId> -->
            <artifactId>maven-pmd-plugin</artifactId>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
    </plugins>

    <pluginManagement>
        <plugins>       
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>3.8</version>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

这样我们就可以完全跳过 PMD 插件发出的警告。