PMD异常BeanMembersShouldSerialize on Autowired字段

时间:2015-12-11 15:31:51

标签: java spring autowired pmd

我在自动装配的字段上获得了像“BeanMembersShouldSerialize”这样的PMD异常。阻止它们的唯一方法是使用“瞬态”或@SuppressWarnings。我的问题是什么是处理PMD和自动装配字段的正确方法。

@Component
public class Sample {

@Autowired
private SoapProperties soapProperties;

public void doSomething() {
    // do something
}

Sample.java:13:找到非瞬态非静态成员。请标记为瞬态或提供访问者。

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

有一个更简单的答案-也许在一天中不存在。只需将“ Autowired”添加到ignoreAnnotations列表中。这在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>

答案 2 :(得分:0)

谢谢..只是fyi ..忽略了Annotations属性不再起作用 任务':pmdMain'的执行失败。

java.lang.IllegalArgumentException:无法在Rule BeanMembersShouldSerialize上设置不存在的属性“ ignoredAnnotations”

答案 3 :(得分:0)

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

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