Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
3.0.0-M3
-
None
-
None
Description
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.
Attachments
Issue Links
- is caused by
-
MNG-7194 PluginParameterExpressionEvaluator incorrectly interpolates unknown subexpression
- Open
This bug is caused by MNG-7194.