I just started using Maven and I read that plugins are additional components that can be used.
A typical structure of pom.xml
file is
<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>
Question: Where should I insert a plugin
tag? such as the following:
<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>
Before the dependency or after the dependency
tag? Does it matter?
If you want to use the plugin for build you can use the below structure.
A late clarification on two important points
Where to place
plugin
A
plugin
should indeed be added in most of the cases within thebuild
/plugins
section, however there is an important difference between placing it withinplugins
against placing it withinpluginManagement
/plugins
.This misunderstanding is often the cause of a non invoked plugin in Maven or an harder troubleshooting:
build
/plugins
are directly part of the default Maven build, if they specify anexecution
or if they configure something for the default build (see below)Plugins under
build
/pluginManagement
/plugins
are not necessarely part of the default Maven build, that is, is a management, it's an hint to maven: it you happen to use this plugin, then please use the version, the configuration, the executions I specify here, in this management.But what happen to use means? Means: if the same plugin is also present in the
build
/plugins
section, then apply this management (and only then it will be effective); or if the plugin is invoked by default by Maven, then also apply it.But how is a plugin invoked by default? That's part of the main philosophy behind maven: convention over configuration. By convention, when you specify a certain
packaging
(defaultjar
, but it can bewar
for example), you want certain plugins to be invoked. To build ajar
, by default invoke themaven-jar-plugin
; to build awar
, by default invoke themaven-war-plugin
and so on. So, if you specify a plugin configuration in thebuild
/pluginManagement
/plugin
for a plugin which has a default binding to the Maven build, then it will be also be used.Ordering
Concerning the ordering of sections within the
pom.xml
file, a further clarification is required: it's indeed irrelevant in most of the cases, however the order ofplugin
element wihtin thebuild
/plugins
section may be important. Since Maven 3.0.3 (MNG-2258
), different plugin executions attached to the same Maven phase will be invoked in their order of declaration in thepom.xml
file. That is, ordering is important in this case, since it may affect the behavior of the build.Additionally, also order of
dependency
declarations may affect your build towards Dependency Mediation, that is, the first declared dependency wins in case of conflict against a transitive dependency. So, once again, ordering is important in certain cases.Last but not least, although ordering is not important for other sections of the
pom.xml
file, good habit is to follow official Maven recommendations and, as a simplified version, follow this order of declaration:The
sortpom-maven-plugin
can also be used to automatically apply this standard ordering, simply invoking the following on the concernedpom.xml
file:For further reading:
You can insert your second snippet anywhere in the pom.xml file between two
<plugins>
</plugins>
tags.Sections order in POM doesn't matter. In general, there are build plugins and reporting plugins in Maven. Your case is to use build plugin so you have to put this
<plugin>
block into<project><build><plugins>...
section.Look at this for some basics about plugins.
You can also place plugins in the
<build>
section of<profile>
if you use maven profiles. The order doesn't matter.<plugin>
should be placed into<plugins>
section which should be placed into<build>
or<pluginManagement>
section. The order of<dependency>
or<build>
section doesn't matter.The full reference about pom.xml is here: http://maven.apache.org/pom.html