My guess is that the EnforcementRule interface might need to allow some context to be passed in, since its not really easy to get @component or @parameter expression="" stuff into a child config object IIRC. Also, probably should throw Exception, to free the rule from having to worry about catch/retrhow muck. All that can be done by the mojo, which will simplify the rule impls.

--jason


On Mar 21, 2007, at 2:35 PM, Andrew Williams wrote:

Much better - properly extensible too :)

Andy

On 21 Mar 2007, at 18:13, Jason Dillon wrote:

Hey, this occurred to me last night...

Why not have one goal, enforcer:enforce, then abstract the things to enforce into rules...

public interface EnforcementRule {
    void execute();
}

And then configure...

<plugin>
    <groupId>...
    <artifactId>...
    <configuration>
        <rules>
            <requireJavaVersion>
                <version>[1.3,1.6]</version>
            </requireJavaVersion>
            <requireMavenVersion>
                <version>[2.0.5)</version>
            </requireMavenVersion>
        </rules>
    </configuration>
</plugin>

IIUC if have 'EnforcementRule[] rules;' in your mojo and you define impls of EnforcementRule like RequireJavaVersion and RequireMavenVersion in the same package, then plexus should inject the instances of the right class into the array.

Then the mojo is really simple, can execute any kind of rules from it... and folks can use the implementation="" stuff to inject their own rules too if needed. Then the goal basically executes the rules and then based on if they pass/fail do something about it (fail the build, warn, etc.).

--jason


On Mar 20, 2007, at 4:19 PM, Brian E. Fox wrote:




Personally I have not problem adding extra execution per thing
I want to enforce.  IMO that is much clearer and simplifies
the implementing mojo.

Potentially yes, but it's also a performance issue invoking the plugin extra times. In my situation, I have about 100+ modules that would be
doing this. If I can figure out how to make it execute only once per
execution no matter where the build is started, then I think separating
them is logical. In fact, if this is possible, I think it's a
requirement.


Funny... most folks I know don't use version ranges.  We
(geronimo) tried to use them at one point for our specs, but
key plugins (like the idea plugin) don't support it.

I don't think that most folks using M2 are familiar with
ranges...  nor do they use them... and when those who do use
them... usually tend to find out they don't work so well.

Fair enough. I think I discovered why they don't work in many cases
while trying to use them.

The OS stuff falls into the same boat, why reinvent a syntax when one
already exists?

Ya, I hear ya... it was just a comment... and more about how
the range syntax hurts my brain more than anything ;-)  Just
looking at a range its not really easy to tell what it
means... where IMO the 1.0+ and 1.0* syntax is relatively
clear w/o having to go read a syntax mapping table ;-)

Although I am not a fan of the implementation, the syntax is logical
once you understand it. Not entirely covering all scenarios, but
certainly enough for this. I don't think the 1.0+, 1.0* is enough to
handle all cases.

Consider 2.1. Perhaps there is a regression in backwards compatibility in the first build. Someone may want to say 2.0.6 < x < 2.1 || x > 2.1 (in otherwords greater than 2.0.6 but not 2.1.0. You can do this with the current specification. I'm not sure that any expression language is going to be completely natural and support enough use cases... If that's true, then this one is as good as any. I could be convinced otherwise
though if there are some alternatives that can be pointed out.

Does anyone else have an opinion?

(btw, I anticipated exactly this disussion, which is why I put out the
RFC)

-------------------------------------------------------------------- -
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]



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

Reply via email to