Почему зависимости плагинов Maven можно указывать только в <build>, а не в <report>?

Почему может <dependencies> для <plugin> определяться только в пределах <build> раздел, а не <reporting> раздел pom?

  • Почему мавен pom.xml синтаксис запретить <dependencies> в <reporting>?
    • Что если пользователь хочет настроить плагин только для <reporting> и установить версию зависимости тоже?
  • Как / почему <build> Информация о зависимости используется плагином в <reporting> раздел?

Документацию, которую я нашел, я объясняю ниже, почему она не ответила на вопрос (путаница с документами - фактически, почему я задаю этот вопрос здесь!).

Из того, что я прочитал, заметил и попробовал, вот мое текущее понимание:

Плагины в <build> раздел скрипта может переопределить информацию о зависимостях по умолчанию, и это повлияет на зависимости плагина в <reporting> раздел. Следовательно, информация о зависимости плагина не обязательно должна быть в <reporting> раздел, только <build> раздел.

Это правильно? Есть ли в документах место, которое разъясняет это? Какие детали мне не хватает, чтобы правильно понять связь между <build> а также <reporting> конфигурация плагина для <dependencies>?

Из документации Maven

В документации Maven говорится: " Использование отчетов против тега сборки":

С использованием <reporting> Tag VS <build> Тег
Настройка модуля отчетности в <reporting> или же <build> элементы в пом не имеют такого же поведения!

mvn site
Он использует только параметры, определенные в <configuration> элемент каждого отчетного плагина, указанный в <reporting> элемент, то есть сайт всегда игнорирует параметры, определенные в <configuration> элемент каждого плагина, указанный в <build>,

В документации явно сказано <configuration> не разделяется между <build> а также <reporting>, но мой вопрос о <dependencies> и как / почему они только объявлены в <build> и никогда <reporting>,

Кажется, что зависимости, указанные в <build> нести к <reporting> плагины. Но я бы хотел получить подтверждение / объяснение.

Минимальный пример

Я столкнулся с этим вопросом при обновлении зависимостей для плагина CheckStyle во время выполнения для использования с mvn site Таким образом, этот минимальный пример POM демонстрирует проблему с плагином Checkstyle в качестве примера.

<?xml version="1.0" encoding="UTF-8"?>
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>mylib</artifactId>
  <version>1.0</version>

  <build> 
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-checkstyle-plugin</artifactId>
            <version>3.0.0</version>
            <dependencies>
                <dependency>
                    <groupId>com.puppycrawl.tools</groupId>
                    <artifactId>checkstyle</artifactId>
                    <version>8.15</version> <!-- Update from default 6.18 to 8.15 -->
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
  </build>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>3.0.0</version>

        <!-- Uncommenting will cause syntax error, Dependencies can't be declared in reporting -->
        <!-- <dependencies>
          <dependency>
            <groupId>com.puppycrawl.tools</groupId>
            <artifactId>checkstyle</artifactId>
            <version>8.15</version>
          </dependency>
        </dependencies> --> 

      </plugin>
    </plugins>
  </reporting>
</project>

0 ответов

Я бы сказал, что здесь не все так просто - потому что <dependencies> возможны в <reporting> раздел!

Думаю, дело в самом плагине (так что для каждого плагина он может быть разным).

Но сначала в чем разница между <build> а также <reporting>:

  • <build> используется во время компиляции, тестирования - т.е. во время генерации / анализа / запуска кода - как с mvn clean install

  • <reporting> используется при создании документации с mvn site

Итак, вопрос в том, требует ли плагин checkstyle вашей зависимости во время генерации документации - я думаю, нет - поэтому checkstyle отклоняет все зависимости в <reporting>.

Итак, чтобы доказать, что зависимости в отчетах возможны, взгляните на spotbugs (еще один известный анализатор):

<build>
  <plugins>
    <plugin>
      <groupId>com.github.spotbugs</groupId>
      <artifactId>spotbugs-maven-plugin</artifactId>
      <version>3.1.12.1</version>
      <configuration>
        <xmlOutput>true</xmlOutput>
        <spotbugsXmlWithMessages>true</spotbugsXmlWithMessages>
        <spotbugsXmlOutputDirectory>target/site</spotbugsXmlOutputDirectory>
        <failOnError>false</failOnError>
        <includeTests>true</includeTests>
        <dependencies>
          <dependency>
            <groupId>com.mebigfatguy.fb-contrib</groupId>
            <artifactId>fb-contrib</artifactId>
            <version>7.4.3.sb</version>
          </dependency>

          <plugin>
            <groupId>com.h3xstream.findsecbugs</groupId>
            <artifactId>findsecbugs-plugin</artifactId>
            <version>LATEST</version>
          </plugin>
        </dependencies>
      </configuration>
    </plugin>
  </plugins>
</build>


<reporting>
  <plugins>
    <plugin>
      <groupId>com.github.spotbugs</groupId>
      <artifactId>spotbugs-maven-plugin</artifactId>
      <version>3.1.12.1</version>
      <configuration>
        <xmlOutput>true</xmlOutput>
        <spotbugsXmlWithMessages>true</spotbugsXmlWithMessages>
        <spotbugsXmlOutputDirectory>target/site</spotbugsXmlOutputDirectory>
        <failOnError>false</failOnError>
        <includeTests>true</includeTests>
        <dependencies>
          <dependency>
            <groupId>com.mebigfatguy.fb-contrib</groupId>
            <artifactId>fb-contrib</artifactId>
            <version>7.4.3.sb</version>
          </dependency>

          <plugin>
            <groupId>com.h3xstream.findsecbugs</groupId>
            <artifactId>findsecbugs-plugin</artifactId>
            <version>LATEST</version>
          </plugin>

        </dependencies>
      </configuration>
    </plugin>
  </plugins>
</reporting>

Обратите внимание на этот пример, потому что здесь <dependencies> являются частью <configuration>. Поэтому всегда целесообразно внимательно читать документацию к каждому плагину.

Чтобы получить полный maven pom.xml, взгляните на мой небольшой OpenSource TemplateEngine, который включает в себя множество лучших практик не только для maven.

Другие вопросы по тегам