Почему зависимости плагинов Maven можно указывать только в пределах <build>, а не <reporting>? - PullRequest
0 голосов
/ 10 декабря 2018

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

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

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

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

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

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

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

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

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

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

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

Кажется, что зависимости, указанные в <build> do , переносятся на <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>

1 Ответ

0 голосов
/ 07 августа 2019

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

Я думаю, что дело в самом плагине (поэтому он может отличаться для каждого плагина).

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

...