Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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
带有PMD检查的Ant脚本无法识别JDK 1.8_Ant_Java 8_Pmd - Fatal编程技术网

带有PMD检查的Ant脚本无法识别JDK 1.8

带有PMD检查的Ant脚本无法识别JDK 1.8,ant,java-8,pmd,Ant,Java 8,Pmd,大家好 我目前正在开发一个遗留系统并移动当前的 jdk到1.8的版本。早些时候,我们的ant脚本是这样应用的 pmd检查: 我搜索了很多,并尝试在taskdef行之后添加下面的行 但最终会出现另一个错误 你知道如何使pmd的上述配置与jdk一起工作吗 1.8 您的问题在于使用的PMD版本 classpath="${basedir}/tools/pmd/pmd-java-4.2.2.jar" 4.2.2是一个非常古老的版本(2008年5月,在Java8发布之前整整6年)。PMD 5.1.0上

大家好

我目前正在开发一个遗留系统并移动当前的 jdk到1.8的版本。早些时候,我们的ant脚本是这样应用的 pmd检查:

我搜索了很多,并尝试在taskdef行之后添加下面的行 但最终会出现另一个错误


你知道如何使pmd的上述配置与jdk一起工作吗 1.8


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

classpath="${basedir}/tools/pmd/pmd-java-4.2.2.jar"
4.2.2是一个非常古老的版本(2008年5月,在Java8发布之前整整6年)。PMD 5.1.0上添加了Java 8支持

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

  • 所有新规则
  • 所有错误修复
  • 所有性能改进
最新的PMD版本是5.8.1。版本6.0.0即将发布

当前PMD版本的等效ant配置为

<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>


您使用的是哪个版本的?可能它太旧了,不支持Java 8语法(例如Lambdas)。我改为PMD 5.8.1,但PMD不支持“targetjdk”属性,Ant任务已更改,改为使用
:这是我所更改的:在上面的配置中:但我看到了以下错误:问题:未能创建任务或类型SourceLanguage这样做我最终得到的结果是:pmd不支持“targetjdk”属性。在我提到targetjdk=1.8Yes的地方,这个属性在很久以前就被删除了,当时PMD不再是一个纯Java的分析工具,取而代之的是
sourceLanguage
元素。我刚刚为您提供了一个ant配置示例,但请参阅
<sourceLanguage name="java" version="1.8"/>
classpath="${basedir}/tools/pmd/pmd-java-4.2.2.jar"
<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>