使用PMD的Ant脚本检查无法识别JDK 1.8

时间:2017-11-21 06:31:06

标签: ant java-8 pmd

  

大家好,

     

我目前正在研究遗留系统并改变当前状态   jdk的版本为1.8。早些时候我们的蚂蚁脚本就是这样适用的   pmd检查:

<target name="check-pmd-writable-force" unless="git.scm">
        <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpath="${basedir}/tools/pmd/pmd-java-4.2.2.jar"/>
        <pmd rulesetfiles="${basedir}/tools/rulesets.xml" targetjdk="1.5">
            <formatter type="html" toFile="${basedir}/pmd_report.html" toConsole="false"/>
            <formatter type="text" toConsole="true"/>
            <fileset dir="${workmanager.dir.src}">
                <patternset refid="sources-no-tests"/>
                <custom classname="com.osm.tools.ant.AntWritableSelector" classpath="${workmanager.ant.tools}"/>
            </fileset>
        </pmd>
    </target>
  

但是当我将我们的应用程序移动到jdk时,1.8 pmd显示了一些   我需要解决的错误/警告。所以我改变了蚂蚁脚本   以下是最新的变化:

                                                                            

  

但这样做会给我以下错误:

The targetjdk attribute, if used, must be set to either '1.3', '1.4', '1.5', '1.6', '1.7' or 'jsp'
  

我搜索了很多,并尝试在taskdef行之后添加以下行   但最终得到了另一个错误。

<sourceLanguage name="java" version="1.8"/>
  

任何想法如何使我的上述配置为pmd与jdk一起使用   1.8

1 个答案:

答案 0 :(得分:2)

您的问题在于使用过的PMD版本。

classpath="${basedir}/tools/pmd/pmd-java-4.2.2.jar"

4.2.2是一个非常古老的版本(2008年5月,甚至在Java 8发布之前的整整6年)。 PMD 5.1.0上添加了Java 8支持。

您应始终使用最新的PMD版本,以确保您拥有:

  • 所有新规则
  • 所有错误修复
  • 所有绩效改进

最新的PMD版本是5.8.1。版本6.0.0即将发布。

当前PMD版本的等效蚂蚁配置

<path id="pmd-classpath">
    <fileset dir="${basedir}/tools/pmd/" includes="**/*.jar"/>
</path>
<target name="check-pmd-writable-force" unless="git.scm">
    <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="pmd-classpath"/>
    <pmd rulesetfiles="${basedir}/tools/rulesets.xml">
        <sourceLanguage name="java" version="1.8"/>
        <formatter type="html" toFile="${basedir}/pmd_report.html" toConsole="false"/>
        <formatter type="text" toConsole="true"/>
        <fileset dir="${workmanager.dir.src}">
            <patternset refid="sources-no-tests"/>
            <custom classname="com.osm.tools.ant.AntWritableSelector" classpath="${workmanager.ant.tools}"/>
        </fileset>
    </pmd>
</target>