Any other thoughts on this proposal, given that we replace the packaging plugin concept with a descriptor instead?

- Brett

On 21/04/2007, at 10:57 PM, Brett Porter wrote:

Hi,

I thought to gather up that massive thread I've just read, I could throw out a quick proposal that might summarise it and serve as a discussion point.

Things we know:
- the current situation is problematic
- we can't require versions for everything (particularly, the implied plugins from the lifecycle - too much burden on the users) - we can't put the versions in the maven installation (the POM must be the definitive reference for how to build the software, changing maven installations should have no effect - except for fixing bugs and adding features some builds might require)

Side note:
- we *could* use the super POM. I don't think it's ideal in this case (since you'd have to increment the model version too often to keep up with the plugin releases), but it should be noted that the super POM *is not* tied to the Maven version. If it changes, it should be tied to the modelVersion.

The discussion also touched on the following, which I think are separate issues: - locking down versions at release time where they were not specified (a more general problem, as it includes not only RELEASE/ LATEST, but ranges too).
- separation of "declaration" from "instantiation" for a POM.

So, here's what I propose:
- require the version in plugin definitions in the POM from modelVersion 4.1.0+ (for 4.0.0 modelVersions, continue to allow the RELEASE as the version). - externalise all packagings/lifecycle definitions (with the exception of 'pom', perhaps) - make the user declare the plugin that contains the packaging they want, including it's version (a plugin may contain more than one packaging) - make the packaging plugin declare the versions of the other lifecycle plugins it uses (in the lifecycle itself, not the plugins pom)
- same for any overlaid lifecycles in plugins
- declared plugins and pluginManagement in the POM always wins over the lifecycle.
- running from the CLI behaves as it does now

Now, while this could mean the jar packaging is in maven-jar- plugin, etc. I would suggest that's too many plugins to change when the compile plugin changes. So instead we could have the maven-java- packages-plugin, v1.0 that has jar, war, ear, ejb, compile, surefire, etc. all pinned to a known, tested set. If a user needs one of them newer: plugin management.

This does mean that the java packaging plugin gets released more often - perhaps even a function of all the other releases. It may be a good idea for us to be able to make that plugin's build somehow a part of the release of the other plugins, perhaps by making it driven by repository metadata (ie, it might not be a real plugin, but a virtual one, but still with a deterministic version to version mapping). We could start off without this and just roadmap the plugin like the others, however.

We should note that this does not tightly couple plugins in the same way it has before which was problematic in m1. We are still "programming to interfaces" - but the metadata wires up the right versions of things. There is nothing in the plugin's pom tying it to another plugin.

This solution is:
- deterministic
- easy to understand
- still as flexible as now for the user
- only a minimum imposition (5-9 lines) on a user
- only a minimum imposition on the developer/release process (the java packaging plugin)

Thoughts?

Cheers,
Brett

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to