我正在这里读一个有趣的教程: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网站和马文网站网站上看到的信息来看,“项目报告”部分应该有一些信息。这里没有来自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>部分,试图获得结果,但仍然没有结果.:/
谢谢你研究这个..。
发布于 2015-03-01 09:43:47
默认情况下,maven-pmd-插件跳过现在的空报告(属性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插件,它默认使用以下三种PMD规则集:java-basic、java-进口、java-unusedcode。还请参见属性规则集。如果希望检测特定问题,则需要启用这些规则。另见如何制定规则集。
https://stackoverflow.com/questions/28775835
复制相似问题