自动装配字段上的 PMD 异常 BeanMembersShouldSerialize

PMD exception BeanMembersShouldSerialize on Autowired fields

我在自动装配的字段上收到类似 "BeanMembersShouldSerialize" 的 PMD 异常。阻止它们的唯一方法是使用 "transient" 或 @SuppressWarnings。我的问题是处理 PMD 和自动接线字段的正确方法是什么。

@Component
public class Sample {

@Autowired
private SoapProperties soapProperties;

public void doSomething() {
    // do something
}

Sample.java:13: 发现非瞬态、非静态成员。请标记为临时或提供访问器。

我想有两种选择。首先,这里是 documentation for the check.

第一个选项是通过以下属性向您的规则添加抑制:violationSuppressRegex、violationSuppressXPath、prefix。我没有使用 Regex 和 XPath 选项,但 XPath 很有趣——如果你学会编写它,你还可以实现全新的检查(虽然语法和 AST 结构有点神秘)。有关抑制在您的 ruleset.xml 中的样子的示例,也许还有更多信息

第二个选项是将检查的 java 代码链接到那里,并在那里实现自动装配的例外,然后在规则集中引用您的 class,同时禁用原始 BeanMembersShouldSerialize 查看。我认为这会更难,并且更有可能需要维护。

有一个更简单的答案 - 也许它在过去并不存在。只需将 "Autowired" 添加到 ignoredAnnotations 列表即可。这在 PMD 6.16.0

中对我有用
<rule ref="category/java/errorprone.xml/BeanMembersShouldSerialize" >
    <properties>
        <property name="ignoredAnnotations" value="lombok.Data|lombok.Getter|lombok.Value|Autowired" />
        <property name="prefix" value="" />
    </properties>
</rule>

谢谢 .. 仅供参考 .. ignoredAnnotations 属性 不再起作用 任务“:pmdMain”执行失败。

java.lang.IllegalArgumentException: Cannot set non-existent property 'ignoredAnnotations' on Rule BeanMembersShouldSerialize

我不得不以不同的方式指定它,

<rule
    ref="category/java/errorprone.xml/BeanMembersShouldSerialize">
    <properties>
        <property name="ignoredAnnotations"
            value="lombok.Data|lombok.Getter|lombok.Value|org.springframework.beans.factory.annotation.Autowired" />
        <property name="prefix" value="" />
    </properties>
</rule>