Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有PMD的自定义规则-在运行时将值传递给规则_Java_Pmd - Fatal编程技术网

Java 具有PMD的自定义规则-在运行时将值传递给规则

Java 具有PMD的自定义规则-在运行时将值传递给规则,java,pmd,Java,Pmd,我的需求是解析java文件并找到实现特定接口的类或接口。因此,我开始在PMD中实现自定义规则。我能够编写一个XPath表达式来搜索类和接口,但无法找到将要进行搜索的接口名传递给XPath规则的正确方法。一种方法是在调用PMD之前定义属性并更新xml文件 <rule name="Implement or extend an interface" message="Implement or extend an interface" class="net.sourceforge.

我的需求是解析java文件并找到实现特定接口的类或接口。因此,我开始在PMD中实现自定义规则。我能够编写一个XPath表达式来搜索类和接口,但无法找到将要进行搜索的接口名传递给XPath规则的正确方法。一种方法是在调用PMD之前定义属性并更新xml文件

<rule name="Implement or extend an interface"
    message="Implement or extend an interface"
    class="net.sourceforge.pmd.rules.XPathRule">
<description>
This rule will help us to find out all the classes/interface which implement a particular interface
</description>
<properties>
    <property name="xpath">
        <value>
        <![CDATA[
        //ImplementsList/ClassOrInterfaceType[@Image=$interfaceName] |
        //ExtendsList/ClassOrInterfaceType[@Image=$interfaceName]
        ]]>
        </value>
    </property>
    <property name="interfaceName">
        <value>Should be set at run time</value>
    </property>
</properties>
<example>

此规则将帮助我们找出实现特定接口的所有类/接口
应在运行时设置

上述方法的问题是无法在线程中调用PMD,因为xml将被共享


是否有人在PMD中遇到过这样的问题,即在运行时将值传递给规则?

如果您希望能够在XPath规则中使用不同的值,则需要有规则的多个副本-每个值一个副本。另一种使用PMD的方法是使用Java规则。它甚至可以调用XPath。区别在于Java是运行时的,因此可以稍后获取值或循环一组值。

我找到了一个解决方案!虽然没有使用PMD。Checkstyle是另一个静态分析工具,它允许定义自定义规则并将运行时值传递给这些规则。