maven-enforcer icon indicating copy to clipboard operation
maven-enforcer copied to clipboard

[MENFORCER-363] Unexpected result from requireProperty with regex when the property is not fully resolved

Open jira-importer opened this issue 5 years ago • 1 comments

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

jira-importer avatar Sep 18 '20 16:09 jira-importer