On 2007-07-10 13:04:50 +0200, Kenney Westerhof <[EMAIL PROTECTED]> said:


currently, Maven does not require declaration of properties used in the pom, you just use them anywhere you like. Usually, if a property is missing, bad things tend to happen because it is replaced with the string "null". On a good day, resources from "translations-null-null"

When/where is it null?

Just an example. What I was trying to say is that if a required property is missing, and the developer forgot to set a default, the build will do unexpected things. Mostly happens to me though when build paths depend on properties.


aren't included in the build, on bad days it's worse... And when you find the missing property in a pom you haven't written, you have to figure out what "${lopt}" means and what its legal values are...

True, but proper defaults should be specified in the pom itself using
the normal properties tag. Commandline, profiles, and settings
can override these. A pom should just work out of the box. If you
want to customize it you'll have to read the pom to see what can be customized;
there should be a readme or documentation in the pom for that.

It may not be possible to set a proper default in the pom, because the property depends on the user's system or organization. Examples are a deployment location or the local company repository. I think it is better to specify that such a value is required (and tell the user about this) than to put a default in there that the user surely cannot work with.

I first proposed to make the declaration mandatory, so the specification of proper defaults would be required, instead of optional and error-prone. I forgot about plugins... So the proposal should be downscaled to "required specification if the property is referenced in the pom.xml in any way". This would enforce the "working out of the box" of the pom, and people know where to look for the property documentation. In addition, having a property specification allows for additional nice things, e.g. "mvn -interactive", promping you for the options.

Commandline, profiles and settings still can override these, but if the property is fully specified, only legal values can be used, preventing unexpected behaviour.


There's lots of cases where properties are used - pom interpolation,
plugin configuration, filtering.. which one are you talking about?

All properties referenced in the pom.xml


For pom interpolation, you may not always want properties evaluated.
In any case, if the property can't be evaluated, the ${expression} is left intact. So the null case doesn't apply here..

For plugin configuration, you cannot possibly list all properties for all
plugins out there.

For filtering, you may just want to print a warning or fail; this could
be configured in the resources plugin.

So how/when do you get the 'translations-null-null' problem exactly?

I don't like the proposal as it's way too verbose

The minimal specification would only be

<property>
        <name>xyz</name>
        <value>123</value>
</property>

It's a bit more verbose than the current form, but all in all, poms are not known for their brevity ;-)

and as others have said
only fixes a small set of problems you may have, but doesn't cover all
cases.

In my experience, this these are the problems that occur the most. Of course, this observation is not gerneralizable. However, I think that specifying what you use is a good principle, and property handling seems an odd case in the "formalize-everything-you-can" pom format.

True, the plugin case cannot be handled, since you never know what a plugin does, so this should be outside of the scope of the proposal. If a plugin is missing a required property, it would be the job of the plugin to complain.

As a sidetrack, maybe there is a better way to configure plugins than properties. From a plugin developer standpoint, it seems a bit redundant to do @parameter expression="${myproperty}" in many places just to make a plugin parameter configurable from the command line or settings.xml. From a user standpoint "--test:skip" would be nicer than "-Dmaven.test.skip" (although I guess that every Maven user can type the latter very fast :-).


There's an issue out there to make all property references/declarations
in the pom the same, preferrably <propname>value</propname>.
Perhaps a '<propertyManagement>' section is more appropriate? :)

I'll update the proposal. Thanks for the comments.

Regards,
Jochen



So instead typing

<properties>
    <lopt>en_US</lopt>
</properties>

this proposal wants you to write

<properties>
    <property>
        <name>lopt</name>
        <defaultValue>en_US</defaultValue>
        <required>true</required>
        <description>Locale to use</description>
        <options>
            <option>
                <value>de_DE</value>
                <description>Use German locale</description>
            </option>
        </options>
    </property>
</properties>

This is rather verbose. Do you really want to list all locales in this case?


Of course, Maven should display an error if a required variable is missing. And it would be nice to have "help:describe-properties"...

-- Kenney



Regards,
Jochen



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