带有PMD检查的Ant脚本无法识别JDK 1.8
大家好 我目前正在开发一个遗留系统并移动当前的 jdk到1.8的版本。早些时候,我们的ant脚本是这样应用的 pmd检查: 我搜索了很多,并尝试在taskdef行之后添加下面的行 但最终会出现另一个错误带有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上
你知道如何使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版本,以确保:
- 所有新规则
- 所有错误修复
- 所有性能改进
<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>