Плагины в Maven и POM.xml
Я только начал использовать Maven, и я прочитал, что плагины - это дополнительные компоненты, которые можно использовать.
Типичная структура файла pom.xml
-
<project>
<groupId>org.koshik.javabrains</groupId>
<artifactId>JarName</artifactId> (A fldernamed JarName was created)
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>JarName</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Вопрос. Где я должен вставить тег plugin
? например:
<plugin>
<groupId>org.jibx</groupId>
<artifactId>jibx-maven-plugin</artifactId>
<version>1.2.4</version>
<executions>
<execution>
<goals>
<goal>bind</goal>
</goals>
</execution>
</executions>
</plugin>
До зависимости или после тега dependency
? Это имеет значение?
Ответы
Ответ 1
<project>
<groupId>org.koshik.javabrains</groupId>
<artifactId>JarName</artifactId> (A fldernamed JarName was created)
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>JarName</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.jibx</groupId>
<artifactId>jibx-maven-plugin</artifactId>
<version>1.2.4</version>
<executions>
<execution>
<goals>
<goal>bind</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Вы также можете разместить плагины в разделе <build>
<profile>
, если вы используете профили maven. Порядок не имеет значения.
Ответ 2
<plugin>
следует поместить в раздел <plugins>
, который следует поместить в раздел <build>
или <pluginManagement>
.
Порядок <dependency>
или <build>
не имеет значения.
Полная ссылка на pom.xml находится здесь: http://maven.apache.org/pom.html
Ответ 3
Позднее разъяснение по двум важным моментам
Где разместить plugin
A plugin
действительно должен быть добавлен в большинстве случаев в разделе build
/plugins
, однако существует важное различие между размещением его внутри plugins
и помещением его в pluginManagement
> /plugins
.
Это недоразумение часто причина не вызываемого плагина в Maven или более сложное устранение неполадок:
- Плагины под
build
/plugins
являются непосредственно частью сборника Maven по умолчанию, если они указывают execution
или если они что-то конфигурируют для сборки по умолчанию (см. ниже)
-
Плагины под build
/pluginManagement
/plugins
не обязательно являются частью сборника Maven по умолчанию, то есть является руководством, это намек на maven: вы используете этот плагин, то, пожалуйста, используйте эту конфигурацию, конфигурацию, настройки, которые я укажу здесь.
Но что значит использовать средства?. Значит: если тот же плагин также присутствует в разделе build
/plugins
, тогда примените это управление (и только тогда это будет эффективно); или, если плагин вызывается по умолчанию Maven, а затем применяйте его.
Но как работает плагин по умолчанию?. Эта часть основной философии maven: соглашение по конфигурации. По соглашению, когда вы укажете определенный packaging
(по умолчанию jar
, но он может быть war
например), вы хотите, чтобы некоторые плагины были вызваны. Чтобы построить jar
, по умолчанию, вызовите maven-jar-plugin
; для создания war
, по умолчанию вызывать maven-war-plugin
и так далее. Итак, если вы укажете конфигурацию плагина в build
/pluginManagement
/plugin
для плагина, который имеет привязку по умолчанию к сборке Maven, тогда он также будет использоваться.
Заказ
Что касается упорядочения секций в файле pom.xml
, требуется дополнительное уточнение: оно действительно не имеет значения в большинстве случаев, однако порядок элемента plugin
в build
/plugins
может быть важным. Поскольку Maven 3.0.3 (MNG-2258
), будут задействованы разные действия с плагинами, присоединенные к той же фазе Maven в порядке их объявления в файле pom.xml
. То есть порядок важно в этом случае, так как это может повлиять на поведение сборки.
Кроме того, также порядок объявлений dependency
может повлиять на вашу сборку в сторону Mediation Medency, то есть первая заявленная зависимость выигрывает в случае конфликта против транзитивной зависимости. Итак, еще раз упорядочение важно в определенных случаях.
И последнее, но не менее важное: хотя упорядочение не важно для других разделов файла pom.xml
, хорошая привычка - следовать официальным Рекомендации Maven и, как упрощенная версия, следуйте этому порядку объявления:
<project>
<modelVersion/>
<parent/>
<groupId/>
<artifactId/>
<version/>
<packaging/>
<properties/>
<dependencyManagement/>
<dependencies/>
<build/>
<reporting/>
<profiles/>
</project>
sortpom-maven-plugin
также может использоваться для автоматического применения этого стандартного заказа, просто вызывая следующее в соответствующем файле pom.xml
:
mvn com.github.ekryd.sortpom:sortpom-maven-plugin:2.5.0:sort \
-Dsort.keepBlankLines -Dsort.predefinedSortOrder=recommended_2008_06
Для дальнейшего чтения:
Ответ 4
Если вы хотите использовать плагин для сборки, вы можете использовать приведенную ниже структуру.
<project>
<build>
<plugins>
</plugins>
</build>
</project>
Ответ 5
Вы можете вставить свой второй фрагмент в файле pom.xml между двумя тегами <plugins>
</plugins>
.
Ответ 6
Порядок разделов в POM не имеет значения. В общем, в Maven есть плагины сборки и плагины отчетов. Ваш случай - использовать плагин сборки, поэтому вы должны поместить этот блок <plugin>
в раздел <project><build><plugins>...
.
Посмотрите этот для некоторых оснований о плагинах.