Почему зависимости плагинов 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.