Java PMD异常BeanMembers应在自动连接字段上序列化

Java PMD异常BeanMembers应在自动连接字段上序列化,java,spring,autowired,pmd,Java,Spring,Autowired,Pmd,我在自动连接字段上遇到PMD异常,如“BeanMembersShouldSerialize”。阻止它们的唯一方法是使用“瞬态”或@SuppressWarnings。我的问题是,处理PMD和自动连线字段的正确方法是什么 @Component public class Sample { @Autowired private SoapProperties soapProperties; public void doSomething() { // do something } java:

我在自动连接字段上遇到PMD异常,如“BeanMembersShouldSerialize”。阻止它们的唯一方法是使用“瞬态”或@SuppressWarnings。我的问题是,处理PMD和自动连线字段的正确方法是什么

@Component
public class Sample {

@Autowired
private SoapProperties soapProperties;

public void doSomething() {
    // do something
}

java:13:找到了非瞬态、非静态成员。请标记为暂时或提供访问者。

我想有两种选择。首先,这是最重要的

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


第二个选项是将检查的java代码链接到那里,并在那里实现自动连接的异常,然后在规则集中引用您的类,同时禁用原始
BeanMembersShouldSerialize
check。我认为这将更加困难,并且更可能需要维护。

有一个更简单的答案-也许它在当时并不存在。只需将“自动连线”添加到IgnoredAnnotation列表中。这在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:无法在规则BeanMembersShouldSerialize上设置不存在的属性“IgnoredNotations”


我必须用不同的方式来说明

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


这个关于编写新XPath检查的答案可能也很有用:请解释您的答案这可能会有帮助:确保build.gradle使用的是最新版本的PMD插件。以下是如何做到这一点: