mirror of https://github.com/apache/maven.git
Adding plugin-prefix mapping doco.
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@226568 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
13c5bc0df8
commit
5622a00ef1
|
@ -0,0 +1,109 @@
|
|||
---
|
||||
Plugin Prefix Resolution
|
||||
---
|
||||
John Casey
|
||||
---
|
||||
30-July-2005
|
||||
---
|
||||
|
||||
Plugin Prefix Resolution
|
||||
|
||||
* Introduction
|
||||
|
||||
When you execute Maven using a standard lifecycle phase, resolving the
|
||||
plugins that participate in that lifecycle is a relatively simple process.
|
||||
However, when you directly invoke a mojo from the command line, as in the case
|
||||
of <<clean:clean>>, Maven must have some way of reliably resolving the
|
||||
<<clean>> plugin prefix to the <<maven-clean-plugin>>. This provides brevity
|
||||
for command-line invocations, while preserving the descriptiveness of the
|
||||
plugin's real artifactId.
|
||||
|
||||
To complicate matters even more, not all plugins should be forced to have the
|
||||
same groupId in the repository. Since groupIds are presumed to be controlled
|
||||
by one project, and multiple projects may release plugins for Maven, it
|
||||
follows that plugin-prefix mappings must also accommodate multiple plugin
|
||||
groupIds.
|
||||
|
||||
To address these concerns, Maven provides a new piece of repository-level
|
||||
metadata (not associated with any single artifact) for plugin groups, along
|
||||
with a plugin mapping manager to organize multiple plugin groups and provide
|
||||
search functionality.
|
||||
|
||||
* Mapping Prefixes to Plugins
|
||||
|
||||
Quite simply, for each group of plugins in the Maven repository
|
||||
(distinguished by a common groupId), there exists a metadata file called
|
||||
<<<plugins.xml>>>. This file consists of the <<groupId>> (for clarity when
|
||||
the file is opened outside the context of the directory), and a group of
|
||||
<<plugin>> elements. Each <<plugin>> in this list contains a <<prefix>>
|
||||
element denoting the plugin's command-line prefix, and an <<artifactId>>
|
||||
element, which provides the other side of the prefix mapping and provides
|
||||
enough information to lookup and use the plugin. When a plugin is installed
|
||||
or deployed, this metadata file is resolved and if necessary, the prefix
|
||||
mapping for the plugin is updated. In the case of deployment, this metadata
|
||||
file is persisted to the remote repository.
|
||||
|
||||
* Configuring Maven to Search for Plugins
|
||||
|
||||
By default, Maven will search the groupId <<org.apache.maven.plugins>>
|
||||
for prefix-to-artifactId mappings for the plugins it needs to perform a given
|
||||
build. However, as previously mentioned, the user may have a need for
|
||||
third-party plugins. Since the Maven project is assumed to have control over
|
||||
the default plugin groupId, this means configuring Maven to search other
|
||||
groupId locations for plugin-prefix mappings.
|
||||
|
||||
As it turns out, this is simple. In the Maven settings file (per-user:
|
||||
<<<~/.m2/settings.xml>>>; global: <<<$M2_HOME/conf/settings.xml>>>), you can
|
||||
provide a custom <<pluginGroups>> section, listing the plugin groupIds you
|
||||
want to search (each groupId goes in its own <<pluginGroup>> sub-element).
|
||||
For example, if my project uses a Modello model file, I might have the
|
||||
following in my settings:
|
||||
|
||||
+---+
|
||||
<pluginGroups>
|
||||
<pluginGroup>org.codehaus.modello</pluginGroup>
|
||||
</pluginGroups>
|
||||
+---+
|
||||
|
||||
This allows me to execute the following, which will generate Java classes
|
||||
from the model:
|
||||
|
||||
+---+
|
||||
m2 -Dversion=4.0.0 -Dmodel=maven.mdo modello:java
|
||||
+---+
|
||||
|
||||
Adding <<org.codehaus.modello>> to the list of groupIds searched for plugin
|
||||
prefixes will automatically import all of the modello maven plugins, but it
|
||||
<<will not>> block the import of plugins from the <<org.apache.maven.plugins>>
|
||||
group - this plugin groupId is always the default, and cannot be suppressed.
|
||||
|
||||
* Current Quirks
|
||||
|
||||
The following list of items are on the table to be listed as bugs, and fixed.
|
||||
They currently amount to quirks in the prefix resolution process.
|
||||
|
||||
* The <<org.apache.maven.plugins>> groupId is only used if <<no other plugin
|
||||
groupId can be found to match the given prefix>>. This means that I can
|
||||
develop a third-party plugin that overloads the <<<compiler>>> prefix, which
|
||||
will drastically change the build behavior. Prefixes already mapped to the
|
||||
<<org.apache.maven.plugins>> groupId should <<NOT>> be overridden, IMO.
|
||||
|
||||
* <<<plugins.xml>>> metadata are resolved from the first repository possible,
|
||||
rather than being merged. If two plugin repositories provide plugins in the
|
||||
the same groupId, none but the plugins in the first repository can be
|
||||
found using plugin-prefix resolution. IMO, this is by design and should not
|
||||
change, particularly if we agree that a single project maintains control
|
||||
over the groupId in question.
|
||||
|
||||
<<NOTE:>> One interesting side-effect of this is that snapshot-capable
|
||||
repositories may have subtle interactions with "normal" repositories in this
|
||||
respect (with one repository suppressing or being suppressed by the other,
|
||||
but both serving the same project/groupId).
|
||||
|
||||
* If you are testing a new plugin, and perform an install, the <<<plugins.xml>>>
|
||||
for that plugin groupId will only be modified locally. If, at the next build,
|
||||
you reference a plugin prefix that is not mapped in the local copy of any
|
||||
configured plugin-prefix metadata, these metadata files will be re-resolved
|
||||
from the remote repositories. This refresh step will erase the prefix mapping
|
||||
for the locally installed plugin, erasing your ability to reference it without
|
||||
configuring it explicitly in your <<<pom.xml>>>.
|
Loading…
Reference in New Issue