自动装配字段上的 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>
我在自动装配的字段上收到类似 "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>