2012-06-27 2 views
0

У меня довольно странное поведение.Пользовательское правило 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> 
... 

Что случилось?

Спасибо.

ответ

1

Возможно, вы не добавили это новое правило в профиль, который используете для своего проекта.

Тот факт, что вы предоставили файл «pmd-extensions.xml», означает, что вы добавили это правило в репозиторий правил. Но если вы не активируете это правило в одном профиле, оно останется неактивным и никогда не будет выполнено.

+0

Я пометил правило в профиле, и этот профиль используется для анализа, поэтому это не является причиной (на самом деле другие пользовательские правила, встроенные в JAR и активированные, вызываются и вызывают нарушение, в то время как это не делает). –