我在这里阅读一个有趣的教程:http://www.avajava.com/tutorials/lessons/how-do-i-generate-pmd-and-cpd-reports-for-a-site.html?page=1
本教程介绍如何使用Maven运行开源静态分析工具PMD,以及在Maven创建的网站上查看生成的输出。 Maven可以使用mvn site
命令轻松创建网站,但本教程将介绍如何使用PMD获取有关源代码的更有用的指标。
我尽最大努力遵循指示。这是我阅读教程的pom.xml
文件:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.name.bookstore</groupId>
<artifactId>bookstore</artifactId>
<packaging>jar</packaging>
<version>1</version>
<name>bookstore</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<extensions>
<!-- start for deploying using webdav -->
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-webdav</artifactId>
<version>1.0-beta-2</version>
</extension>
</extensions>
</build>
<distributionManagement>
<!-- start -location where site is deployed -->
<site>
<id>site.deployments</id>
<name>Site deployments</name>
<url>dav:localhost/${basedir}</url>
</site>
</distributionManagement>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.4</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
<version>2.5</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.1</version>
</plugin>
</plugins>
</reporting>
</project>
当我运行命令时:mvn clean site
我得到了一个由Maven构建的网站,其中包含许多不同的页面,但没有一个显示有关PMD的任何内容。我在这里错过了什么? 为什么我在生成的网站上看不到有关PMD的任何内容?
此外,当我运行mvn pmd:pmd
时,成功构建但我没有获得任何有用的PMD指标。我甚至在我的一个Java源文件中编写了一些未使用的变量和方法,如上面的链接教程所示,没有任何有用的输出。
mvn pmd:pmd
命令确实会创建一些文件。一对夫妇是它看起来像引擎的规则文件,其他是空的。请参阅以下屏幕截图:
图1 :由pmd:pmd命令创建的文件
图2 :清空pmd文件 - 即使Java源文件中存在明显错误
有谁知道那是什么?为什么PMD不能和我一起使用Maven?
感谢您阅读本文。
另外,根据我在PMD's website和Maven's website上的互联网阅读内容,应该在&#34;项目报告&#34;中提供一些信息。部分。 PMD中没有数据。请看下面的截图。
图3 :项目报告中没有找到PMD数据
问候
更新
当我将pom.xml
文件的PMD部分更改为以下代码段时,我通过PMD获得了一些CPD结果,但是代码错误上的PMD仍然没有。我甚至用NullPointerException编码,PMD甚至在发出mvn pmd:check
命令时都没有说。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.4</version>
<configuration>
<linkXref>true</linkXref>
<sourceEncoding>utf-8</sourceEncoding>
<minimumTokens>1</minimumTokens>
<targetJdk>1.7</targetJdk>
</configuration>
</plugin>
在代码段中,我将sourceEncoding
标记更改为utf-8,因为我看到的所有内容都是utf-8。我还将minimumTokens
值更改为1以尝试从此插件获得更多输出。我还将此代码段放在<build>
部分以尝试获得结果,但仍然没有......:/
感谢您对此进行研究......
答案 0 :(得分:15)
默认情况下,maven-pmd-plugin会跳过空报告(属性skipEmptyReport)。您需要将此设置为false,以便始终在您的站点中获取PMD / CPD报告:
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.4</version>
<configuration>
<skipEmptyReport>false</skipEmptyReport>
</configuration>
</plugin>
</plugins>
</reporting>
这适用于PMD和CPD。我假设,这是你的问题,如图2所示,你没有检测到PMD违规(pmd.xml文件为空)。
属性minimumTokens配置CPD并定义最少必须将代码剪切的代码声明为重复的时间。数字越小,检测到的重复数越多,但重复数据也可能更短,因此可能更常见误报。
如果不进一步配置maven-pmd-plugin,它默认使用这三个PMD规则集:java-basic,java-imports,java-unusedcode。另请参见属性rulesets。如果要检测特定问题,则需要启用这些规则。另请参阅How to make a ruleset。