大家好,
我目前正在研究遗留系统并改变当前状态 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
答案 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>