maven-enforcer
maven-enforcer copied to clipboard
[MENFORCER-363] Unexpected result from requireProperty with regex when the property is not fully resolved
Bertrand Renuart opened MENFORCER-363 and commented
I was looking for a way to verify a property is defined and is fully resolved. When it cannot resolve a placeholder, Maven usually leave it unchanged. So if property "unknown" is not defined, "<foo>pre-${unknown}</foo>" would not fully resolve and would left asis.
With this in mind, I thought I could use the "requireProperty" with a regex looking for "$" to check if a property is fully resolved or not.
Consider the following example:
<properties>
<foo>${unknown}</foo>
<bar>pre${unknown}</bar>
</properties>
<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<goals><goal>enforce</goal></goals>
<configuration>
<rules>
<requireProperty>
<property>foo</property>
<regex>[^$]*</regex>
</requireProperty>
<requireProperty>
<property>bar</property>
<regex>[^$]*</regex>
</requireProperty>
</rules>
...
Here is what the execution reports:
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireProperty failed with message:
Property "foo" is required for this build.
For the first rule, since "foo" refers to an unknown property, I can understand it is "not defined" and that the rule complains about it.
However, I would expect the second rule to fail as well. Let's change its regex to "[0-9]+" to see what happens:
[WARNING] Rule 1: org.apache.maven.plugins.enforcer.RequireProperty failed with message:
Property "bar" evaluates to "prenull". This does not match the regular expression "[0-9]+"
As we can see, the placeholder "${unknown}" has been resolved into "null" - reason why the rule didn't fail initially...
IMHO this behaviour is not intuitive since Maven's standard behaviour is to leave placeholders unchanged when they cannot be resolved.
Affects: 3.0.0-M3
Issue Links:
- MNG-7194 PluginParameterExpressionEvaluator incorrectly interpolates unknown subexpression ("is caused by")