On 31 Aug 07, at 9:20 AM 31 Aug 07, Brett Porter wrote:

sorry for the brevity - I'm heading off to bed and am afk for a day and a bit so wanted to get a quick response in...

On 01/09/2007, at 1:45 AM, Jason van Zyl wrote:

A couple notes that you can incorporate from experiences I've had based on a client setup:

- The enforcer plugin now has a rule to fully lock down all plugin versions

right, so that's the tooling referred to? I thought it just checked, didn't actually apply the changes?


- You do have to lock down all plugins including things like "eclipse:eclipse" because these are used extensively by many groups and these changing can have serious repercusions in a build environment. Everything must be locked down for it to be stable. So someone can start a new project to try something but when it officially becomes part of the build that must be communicated to the build team and the plugin needs to be locked down. A single point that can vary, let's say the eclipse plugin that has a bug and many people are screwed. It's easy to either use a POM that doesn't have enforcement turned on by not inheriting from the POM with the rule declaration, or an option to turn off enforcement which would always be turned on for blessed builds.

I agree that you want to flip the switch that enforces it in most cases, but I think maybe this could be configurable. I don't want to lose the ability to run archetype:create on a default install,

You can I'm just saying this is undesirable in stable environment. Who might have been caught out with the faulty release of Archetype if we didn't catch it and it wasn't locked down in a given environment?

or to be able to try out other plugins not defined in the POM. This is especially the case for distributed source code - you don't want to ask a user to have to edit a POM to add the IDEA plugin they love just because the project only defines the eclipse configuration.

I'm concerned that begin too heavy handed on this loses sight of the new user experience a bit.


Not at all. It has be easy to experiment, no argument there. But what's killing people is the stable build requirement. The enforcer can either be turned on in a profile to check, I've had one client who wants it on all the time as configuring plugins is not the developer's job. But there is no question if you want stability in a corporate environment you must lock down everything and this I hear over and over again from clients. Build/SCM leads care less about experimentation and more about stability. There's not reason we can't make both work easily.


- Putting all versions in an organization POM is not that loathsome. It's 30 minutes work but it could be easier. I locked down everything with a client including eclipse, idea, and site plugins pretty shortly. It now works great. So in practice this is not that bad.

I think the long term maintenance of that is a problem. We're already seeing it with the parent POM structure and locked down versions we have here.


Why is it a problem? For someone working even a couple hours a week on builds, and normally we're talking full time people this is not a problem in practice. You can't hide the version set in a plugin pack where people can't see the versions being used easily. I'm against that because I've seen what users want in corporate environments. They want stability and they want to see exactly what's being used without having to run a report.


- One mixin with a plugin configuration chunk and someone would be done. If we provided a loosely couple set of plugins we think work then people can grab those and put them in their POM. We can have a tool to help them. OBSERVATION: I've noted that build/scm people want to see these versions in an actual file. So being able to grab the recommended set, grab a snippet and check it in. From what I'm seeing the mixins would allow people to put all their version information in one place. A reference to some artifact seems to make people uncomfortable.

I tried to address this by using a POM as the source so you can just see it and grab it - did I miss something? Obviously generic mixins would be better, but I haven't seen a proposal for that yet.


- No versions of anything should be declared in the Super POM. This should be totally externalized.

I special cased the clean plugin only because it's just dumb to have to define that in every project, it so rarely changes.


It's still better then putting it in the SuperPOM. If we're providing the pre-defined sets what is the point in separating the specification of one plugin from the rest? As simple as it may seem what if we did lock that version down and there was something wrong with it? We should manage them from one place. The SuperPOM is the place for our directory structure defaults and locations. Plugin configuration is the domain of the user.


- We don't need any new internal mechanism to model this. We can make snippets for people to use, and they will mix and match because they will. We just need to get them started. A snippet inside pluginManagement will do.

Snippet? Are you saying cut and paste, or another name for a mixin, or something else?

A snippet of a POM that can be used as a mixin.


Cleaning up the internal model, and providing mixins and we have what we need.

I'm happy to use mixins instead if they exist - I just didn't want to risk missing getting this in because the other feature wasn't there.


It can already be done in a pretty sane way now with the enforcer plugin. The plugin snippets could be created right now, we could put them somewhere, and people could use them starting tomorrow. This would actually be helpful. This would be a full solution. Snippets + Enforcer plugin. The ability to mixin a snippet would make this easier but we're most of the way to a solution already even for 2.0.x users.

The lifecycle doesn't need to be refactored for this

Not sure what you mean - I didn't think I suggested refactoring the lifecycle for this (I did say there was some optional, related work that could be done at the end).

Anyway, we can always boil this proposal down to the elements that still remain once the mixins are implemented. We still need to force the versions to be specified at least.

- Brett

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


Thanks,

Jason

----------------------------------------------------------
Jason van Zyl
Founder and PMC Chair, Apache Maven
jason at sonatype dot com
----------------------------------------------------------




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

Reply via email to