Brett,
If I understand this right, you'll be able to tell Maven to automatically
check for an update of a particular plugin (great for automatically
distributing bug fixes across projects, much like the Eclipse Update
Manager). This would be accomplished by adding a plugin dependency without
version to the POM? Based on a schedule you define (as for snapshots), M2
will compare your local plugin's version with the version listed in e.g.
maven-idea-plugin-RELEASE.version.txt?
This sounds great.
Thomas
On 5/5/05, Brett Porter <[EMAIL PROTECTED]> wrote:
>
> (first draft, after initial feedback I will turn it into a doc, likewise
> for the lifecycle).
>
> We have a feature in m2 that will take the prefix of a goal name eg
> "idea:idea" -> idea, and discover the plugin either locally or remotely
> and use it. Currently, it is hardcoded to
> org.apache.maven.plugins.maven-${PREFIX}-plugin:1.0-SNAPSHOT.
>
> Here are the changes I am implementing to make this more future-proof.
>
> Firstly it is worth nothing there are parallels to other concepts:
> - SNAPSHOT handling in general
> - the concepts of both "unversioned" dependencies and "latest release"
> dependencies
>
> How will it be used?
>
> It will be most important for users getting the plugin they don't have
> for the first time, though I imagine it would also be important for
> getting updates of those plugins.
> It should only be referencing released plugins, though I think if we
> separate the SNAPSHOT repository and publish nightlies as "releases" on
> there, including that in your list of plugin repositories will allow you
> to get more frequent updates.
> I think the update checks should be identical to snapshots: you can
> configure it to be never, daily, interval based, or every execution,
> with the default being daily.
>
> When will it be used?
>
> When a goal is entered on the command line that was not recognised from
> the plugin definitions already in the POM. In addition, the version
> resolution will be used for plugins specified in the POM without a
> version.
>
> What about reproducibility?
>
> The release tool will need to fill in resolved version information for
> plugins into the POM.
>
> What if I don't want the latest version?
>
> There are a lot of potential configurations that we might want to have
> for this in the settings.xml, but I'd like keep it simple for now and
> let usage drive the features. Some thoughts are excluding specific
> versions from use, or setting a sticky version for certain plugins
> (overridden by anything in the POM, however). Another option might be to
> prompt whether a user wants to update or not, and store that information
> in the local repository.
>
> I think we should leave it to tools or IDE integration to do anything
> fancy like presenting a list of available versions.
>
> ===
>
> Alternate goal specification
> ---
>
> I think we should support goals of the format:
> groupId:artifactId:version:goal. eg.
> org.apache.maven.plugins:maven-idea-plugin:1.0-alpha-1:idea.
> Obviously this is far too ugly for general use, but it does allow a user
> to be incredibly specific in some case, and can be used in the lifecycle
> definitions to make them more deterministic.
>
> The rest will cover how the first 3 are determined when the traditional
> prefix is used, eg "idea:idea"
>
> Versioning
> ---
>
> Firstly, we need to be able to identify the latest version of a plugin.
> This involves the knowledge of what is released, at a per-artifact ID
> level.
>
> Depending on repository format, the file would be:
> /org/apache/maven/plugins/maven-idea-plugin/maven-
> idea-plugin-RELEASE.version.txt
> /org.apache.maven.plugins/poms/maven-idea-plugin-RELEASE.version.txt
>
> Like SNAPSHOT.version.txt, this would simply contain the version that is
> the designated release.
>
> This file would be written at _release_ time, not _deploy_ time, so is
> an independant operation from deployment, and should happen afterwards.
> In fact, there may well be a release lifecycle phase after deploy for
> this purpose (this can be determined as the release tool is fleshed out).
>
> Note that the release transformation will not at this point be exposed
> to dependencies in general - I'd prefer that we take a proper review of
> our dependency mediation requirements first.
>
> This covers how the version is discovered if not specified in the POM,
> or the goal came from the command line - but what about finding out the
> groupID and artifactID?
>
> Discovering the Group and Artifact ID from a Prefix
> ---
>
> We have a default rule which will be used as a fallback, where the
> prefix "idea" is turned into "maven-idea-plugin". This will be retained
> if no other information is found.
>
> Before applying the default rule, some more metadata from the repository
> will be consulted. This will be stored at the group level, and named
> "plugins.xml".
>
> /org/apache/maven/plugins/plugins.xml
> /org.apache.maven.plugins/plugins.xml
>
> While this could potentially include version information as well, it is
> worth being able to check these on a plugin-by-plugin basis, and it also
> fits with the potential RELEASE specifier on dependencies. This could be
> reconsidered in future versions.
>
> Format of the file for now is simple:
> <prefixes>
> <groupId>org.apache.maven.plugins</groupId>
> <plugins>
> <plugin>
> <prefix>idea</prefix>
> <artifactId>maven-idea-plugin</artifactId>
> </plugin>
> ...
> </plugins>
> </prefixes>
>
> This particular file will also be updated at release time for a plugin
> (though it should rarely be necessary as only new additions need to be
> published back).
>
> The list of group IDs to search will be configured from settings.xml,
> with the default being just org.apache.maven.plugins. The process will
> be to load the plugins.xml file from each of the configured groups, then
> build the map of prefixes to plugin group/artifactIDs. If there is a
> clash, initially it should fail. We might allow using the first
> discovered or some other resolution mechanism, but would hope not to get
> that situation as a goal representation might start taking on different
> meanings in different contexts.
>
> That's about it... any thoughts?
>
> - Brett
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>