У меня довольно странное поведение.Пользовательское правило XPath вызывает нарушение в pmd, но не в сонаре
создать правило XPath для PMD 4.2.6 в файле с именем PMD-extensions.xml:
...
<rule name="AvoidPrintStackTrace-XPath"
message="Avoid to use printStackTrace - XPath"
class="net.sourceforge.pmd.rules.XPathRule">
<description>Avoid to use printStackTrace - XPath</description>
<properties>
<property name="xpath">
<value>
<![CDATA[
//Name[contains (@Image, "printStackTrace")]
]]>
</value>
</property>
</properties>
<example>
<![CDATA[
// don't do this!
myException.printStackTrace()
]]>
</example>
</rule>
...
У меня есть модульный тест проверяющий это правило и работает отлично:
...
@Before
public void setUp() {
addRule("rulesets/pmd-extensions.xml", "AvoidPrintStackTrace-XPath");
}
...
Но когда я вставляю это правило в Sonar, правило не срабатывает, если я ожидал его:
...
<rule key="AvoidPrintStackStrace-XPath" >
<name>AvoidPrintStackStrace-XPath</name>
<configKey>rulesets/pmd-extensions.xml/AvoidPrintStackTrace-XPath</configKey>
<category name="Usability"/>
<description>Avoid to use printStackTrace - XPath</description>
</rule>
...
И если я объявляю это это правило непосредственно в Sonar (с тем же выражением XPath), правила пожарной нарушение, как и ожидалось:
...
<rule key="AvoidPrintStackStrace-XPath-Sonar" priority="MAJOR">
<name><![CDATA[AvoidPrintStackStrace-XPath-Sonar]]></name>
<configKey><![CDATA[net.sourceforge.pmd.rules.XPathRule]]></configKey>
<category name="Maintainability"/>
<description>Avoid to use printStackTrace - XPath-Sonar</description>
<param key="xpath" type="s">
<description><![CDATA[XPath expressions.]]></description>
<defaultValue>//Name[contains (@Image, "printStackTrace")]</defaultValue>
</param>
<param key="message" type="s">
<description><![CDATA[Message to display when a violation occurs.]]></description>
<defaultValue>Prevent use of printStackTrace</defaultValue>
</param>
</rule>
...
Что случилось?
Спасибо.
Я пометил правило в профиле, и этот профиль используется для анализа, поэтому это не является причиной (на самом деле другие пользовательские правила, встроенные в JAR и активированные, вызываются и вызывают нарушение, в то время как это не делает). –