Reputation: 21275
If my pom is a child a hierarchy of other poms, is there a way to show exactly which parent pom contains the definition of a plugin?
Upvotes: 2
Views: 342
Reputation: 27862
Short answer is most probably: No.
According to the way Maven builds its model before executing a certain build, the Maven Builder Model:
pom.xml
file, as a result of merges, overriding, profiling, injections (of properties) and so on.To have a look at the full pom, the effective-pom
goal of the maven-help-plugin
is definitely the right tool. It will show (or write to a given file) the final effective pom a build is gonna use.
The full definition of a plugin (its executions, its global configuration and so on) can only be created once we have the effective pom, because:
pluginManagement
section in any point in the hierarchy can influence a certain pluginplugin
section in any point in the hierarchy can also influnce itprofiles
declared in any point in the hierarchy can also influence itproperties
, if used as placeholders, can also play an important roleHaving a look at the official Maven POM reference, we can see many entry point to influence a certain plugin definition, which will only be effective to our build once merged through the whole pom hierarchy. A definition per se would not help much since it can then be overriden/influenced further on on the hierarchy chain.
Think about the inherited
element of a plugin
:
true
orfalse
, whether or not this plugin configuration should apply to POMs which inherit from this one. Default value istrue
.
Or merging of plugin
configuration
sections:
The default behavior is to merge the content of the configuration element according to element name. If the child POM has a particular element, that value becomes the effective value. if the child POM does not have an element, but the parent does, the parent value becomes the effective value.
You can control how child POMs inherit configuration from parent POMs by adding attributes to the children of theconfiguration
element. The attributes arecombine.children
andcombine.self
. Use these attributes in a child POM to control how Maven combines plugin configuration from the parent with the explicit configuration in the child.
Or further down per execution
of a plugin
:
inherited
: Like the inherited element above, setting thisfalse
will supress Maven from passing this execution onto its children. This element is only meaningful to parent POMs.
The overall management can then be influenced by pluginManagement
:
Plugin Management contains plugin elements in much the same way, except that rather than configuring plugin information for this particular project build, it is intended to configure project builds that inherit from this one. However, this only configures plugins that are actually referenced within the plugins element in the children. The children have every right to override
pluginManagement
definitions.
As such, the plugin definition at a certain point of the pom hierarchy may not be meaningful to the final effective build.
Upvotes: 3