[
https://issues.apache.org/jira/browse/MENFORCER-363?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Bertrand Renuart updated MENFORCER-363:
---------------------------------------
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:
{code:java}
<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>
...{code}
Here is what the execution reports:
{code:java}
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireProperty failed with
message:
Property "foo" is required for this build.{code}
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:
{code:java}
[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]+" {code}
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.
was:
Consider the following example:
{code:java}
<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>[a-z]+</regex>
</requireProperty>
<requireProperty>
<property>bar</property>
<regex>[a-z]+</regex>
</requireProperty>
</rules>
...{code}
Here is what the execution reports:
{code:java}
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireProperty failed with
message:
Property "foo" is required for this build.{code}
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, for the second rule I would expect "bar" to resolve to "pre${unknown}"
which obviously does not satisfy the regex. If we change the regex to "[0-9]*",
the second rule now fails with the following message:
{code:java}
[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]+" {code}
As we can see, the "${unknown}" has been resolved into "null"...
IMHO this behaviour is not intuitive since Maven's standard behaviour is to
leave placeholders unchanged when they cannot be resolved.
> Unexpected result from requireProperty with regex when the property is not
> fully resolved
> -----------------------------------------------------------------------------------------
>
> Key: MENFORCER-363
> URL: https://issues.apache.org/jira/browse/MENFORCER-363
> Project: Maven Enforcer Plugin
> Issue Type: Bug
> Components: Standard Rules
> Affects Versions: 3.0.0-M3
> Reporter: Bertrand Renuart
> Priority: Major
>
> 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:
> {code:java}
> <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>
> ...{code}
>
> Here is what the execution reports:
> {code:java}
> [WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireProperty failed
> with message:
> Property "foo" is required for this build.{code}
>
> 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:
> {code:java}
> [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]+" {code}
> 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.
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)