我在自动装配的字段上获得了像“BeanMembersShouldSerialize”这样的PMD异常。阻止它们的唯一方法是使用“瞬态”或@SuppressWarnings。我的问题是什么是处理PMD和自动装配字段的正确方法。
@Component
public class Sample {
@Autowired
private SoapProperties soapProperties;
public void doSomething() {
// do something
}
Sample.java:13:找到非瞬态非静态成员。请标记为瞬态或提供访问者。
答案 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>