Maven: почему я могу запустить mvn checkstyle: checkstyle без pom.в xml файле?
Я использую базовый проект maven, где в pom определены только следующие вещи.XML-код:
- зависимость javaee-api
- зависимость junit
- плагин maven-compile-plugin
- плагин maven-war-plugin
- плагин wildfly-maven-plugin
почему я могу запустить mvn checkstyle:checkstyle
в командном окне? Не должен ли я определить плагин checkstyle pom.xml
? Что я упускаю?
"Правка": установлен плагин eclipse "Eclipse Checkstyle Plug-In". Это причина? Если да, то как maven общается с ним?
2 ответов
как вы уже видели, можно выполнять Плагины непосредственно из командной строки без настройки плагина в файле POM вашего проекта.
чтобы узнать, какой плагин вы хотите выполнить maven, использует разрешение префикса плагина.
через командную строку, mvn checkstyle:checkstyle
, в качестве примера это примерно то, что делает maven:
- возьмите префикс, бит перед двоеточием, из выполнения. В вашем случае
checkstyle
. - устранить эту к возможному имени (artifactId) плагина. Для этого он использует два возможных формата:
-
maven-${prefix}-plugin
(для официальных плагинов Maven) -
${prefix}-maven-plugin
(плагинов из других источников)
-
- такой
maven-checkstyle-plugin
как artifactId плагина - поиск плагина с этим artifactId и одним из настроенных groupId (по умолчанию Maven ищет с помощью groupId
org.apache.maven.plugins
) - он находит maven-checkstyle-плагин
- выполняет цель (бит после двоеточия в команде), поэтому цель checkstyle в этом случае.
все это объясняется гораздо более подробно и лучше, чем я могу на отображение префикса плагина страница официальной документации maven.
причина в том, что плагин не должен быть явно настроен в pom или привязан к фазе для запуска. Таким образом, он всегда может запускаться прямым вызовом (указывая цель вместо фазы при вызове Maven):
mvn [options] [<goal(s)>] [<phase(s)>]
посмотреть жизненный цикл документы:
цель плагина представляет собой конкретную задачу (более тонкую, чем этап сборки), которая способствует созданию и управлению проектом. Это может быть связано до нуля или более этапов сборки. Цель, не связанная с какой-либо фазой сборки, может быть выполнена вне жизненного цикла сборки путем прямого вызова.
Это определенно не имеет ничего общего с плагинами Eclipse.