Maven PMD插件没有使用'mvn site'命令或'pmd:pmd'生成报告

use*_*315 7 java pmd maven

我在这里阅读一个有趣的教程: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>
Run Code Online (Sandbox Code Playgroud)

当我运行命令时:mvn clean site我得到一个由Maven构建的网站,其中包含许多不同的页面,但没有一个显示有关PMD的任何内容.我在这里错过了什么?为什么我在生成的网站上没有看到有关PMD的任何内容?

此外,当我运行时,mvn pmd:pmd有一个成功的构建,但我没有获得任何有用的PMD指标.我甚至在我的一个Java源文件中编写了一些未使用的变量和方法,如上面的链接教程所示,没有任何有用的输出.

mvn pmd:pmd命令似乎确实创建了一些文件.一对夫妇是它看起来像引擎的规则文件,其他是空的.请看下面的屏幕截图:

使用mvn pmd:pmd命令创建的文件 图1:pmd:pmd命令创建的文件

pmd的空文件

图2:清空pmd文件 - 即使Java源文件中存在明显错误

有没有人知道那是什么?为什么PMD不能和我一起使用Maven?

感谢您阅读本文.

另外,根据我在PMD网站Maven网站上的互联网阅读内容,"项目报告"部分应该有一些信息.PMD中没有数据.请看下面的截图.

项目报告中没有PMD数据

图3:项目报告中未找到PMD数据

问候

UPDATE

当我将pom.xml文件的PMD部分更改为下面的片段时,我通过PMD获得了一些CPD结果,但是在代码错误上仍然没有PMD.我甚至用NullPointerException编码,即使发出mvn pmd:check命令,PMD也没有说什么.

 <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>
Run Code Online (Sandbox Code Playgroud)

在代码片段中,我将sourceEncoding标签更改为utf-8,因为我看到的所有内容都是utf-8.我还将minimumTokens值更改为1以尝试从此插件获得更多输出.我也把这个片段放在<build>试图获得结果的部分但仍然没有......:/

谢谢你研究这个......

ada*_*gel 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>
Run Code Online (Sandbox Code Playgroud)

这适用于PMD和CPD.我假设,这是你的问题,如图2所示,你没有检测到PMD违规(pmd.xml文件为空).

属性minimumTokens配置CPD并定义最少必须将代码剪切的代码声明为重复的时间.数字越小,检测到的重复数越多,但重复数据也可以更短,因此可能更常见的是误报.

在没有进一步配置maven-pmd-plugin的情况下,它默认使用这三个PMD规则集:java-basic,java-imports,java-unusedcode.另请参见属性规则集.如果要检测特定问题,则需要启用这些规则.另请参见如何创建规则集.