Подключаемый модуль Maven PMD не создает отчет с помощью команды mvn site или pmd: pmd

Я читаю интересный учебник: 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, похоже, создает некоторые файлы. Пара файлов правил для движка, на который он похож, а остальные пустые. Пожалуйста, посмотрите скриншоты этого ниже:

Файлы, созданные с помощью команды mvn pmd: pmdРисунок 1: Файлы, созданные pmd: pmd команда

пустой файл для pmd

Рисунок 2: Пустой файл pmd - хотя в исходном файле Java есть очевидные ошибки.

Кто-нибудь знает, что случилось? Почему PMD у меня не работает с Maven?

Спасибо, что прочитали это.

Кроме того, из того, что я прочитал в Интернете на веб-сайте PMD и на веб-сайте Maven должна быть некоторая информация в «Отчетах по проекту» " раздел. Однако здесь нет данных от PMD. См. Снимок экрана ниже.

Нет данных PMD в отчетах по проекту

Рисунок 3: в отчетах по проекту нет данных PMD

С Уважением

ОБНОВЛЕНИЕ

Когда я меняю раздел PMD файла pom.xml на приведенный ниже фрагмент, я получаю некоторые результаты CPD через PMD, но по-прежнему ничего от 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>, чтобы попытаться получить результаты, но все равно ничего ...: /

Спасибо, что изучили это ...


person user3870315    schedule 27.02.2015    source источник


Ответы (1)


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-import, java-unusedcode. См. Также свойство наборы правил . Если вы хотите обнаружить определенные проблемы, вам необходимо включить эти правила. См. Также Как создать набор правил.

person adangel    schedule 01.03.2015
comment
Ах, это сработало. Спасибо вам за помощь. :) Я добавил несколько правил, чтобы отключить PMD, и он действительно показал это в отчете! Еще раз спасибо за помощь с Maven и PMD. Потрясающие. - person user3870315; 02.03.2015