Uploaded image for project: 'Maven Enforcer Plugin'
  1. Maven Enforcer Plugin
  2. MENFORCER-363

Unexpected result from requireProperty with regex when the property is not fully resolved

Agile BoardAttach filesAttach ScreenshotAdd voteVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 3.0.0-M3
    • None
    • Standard Rules
    • 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

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            brenuart Bertrand Renuart

            Dates

              Created:
              Updated:

              Slack

                Issue deployment