I guess you don't even need a custom property since each plugin tends to
have one already. So a simpler property-based approach would just be:

<properties>
  <enforcer.skip>${skipChecks}</enforcer.skip>
</properties>

And maybe you'd also need <skipChecks>false</skipChecks> in your properties
to provide a default for when skipChecks isn't specified on the command
line. But like I said, I haven't tried this approach so you'd have to
experiment and see if it works for you.


On Mon, Sep 14, 2020 at 10:38 AM Andy Feldman <an...@wealthfront.com> wrote:

> I agree this behavior is unexpected. But it's different for properties! So
> a workaround here is to have a unique property for each check you want to
> skip, so that you can override the property by command line rather than
> overriding the <skip> configuration directly. Then you can have a single
> way to set all these properties. In my company's parent pom we have a
> profile that can be activated like `mvn install -P quick` to skip tests and
> checks:
>
> <profile>
>   <id>quick</id>
>   <properties>
>     <checkstyle.skip>true</checkstyle.skip>
>     <duplicate-finder.skip>true</duplicate-finder.skip>
>     <enforcer.skip>true</enforcer.skip>
>     <skipITs>true</skipITs>
>     <skipTests>true</skipTests>
>   </properties>
> </profile>
>
> So if I want to still run the enforcer plugin, I can do this: `mvn install
> -P quick -Denforcer.skip=false`.
>
> If you want to keep using a property rather than a profile, I assume you
> could have the specific property for each check reference your main
> property by default, like:
>
> <properties>
>   <skip.our.enforcer>${skipChecks}</skip.our.enforcer>
> </properties>
> [...]
> <skip>${skip.our.enforcer}</skip>
>
> But I haven't tested it.
>
>
> On Mon, Sep 14, 2020 at 9:11 AM Andreas Sewe <
> andreas_s...@buildingblobs.com> wrote:
>
>> Hi,
>>
>> I am currently sprinkling <configuration> child elements like the
>> following through my (parent) POMs for enforcer:enforce, tidy:check and
>> checkstyle:check <executions>:
>>
>>   <skip>${skipChecks}</skip>
>>
>> This allows me to skip all kinds of checks with a simple
>> -DskipChecks=true (or even -DskipChecks), just like I am used to for
>> tests with -DskipTests.
>>
>> Unfortunately, I cannot selectively override this, as the following
>> doesn't work:
>>
>>   mvn install -DskipChecks -Denforcer.skip=false
>>
>> The above command still uses the <skip>${skipChecks}</skip> (with
>> skipChecks=true).
>>
>> Further experimentation led me to believe that *any* explicit pom.xml
>> <configuration> cannot be overridden by a property expression given on
>> the command line.
>>
>> This was very surprising, as I would have expected Maven to follow a
>> "command line takes precedence over configuration file" approach like
>> other tools -- but apparently it doesn't (at least in Maven 3.3.9 and
>> 3.6.3) and thus violates the Principle of Least Astonishment (for one of
>> its users anyway).
>>
>> In particular, Maven's handling of property expressions means that
>> having no <skip> element and making the default explicit behave
>> differently; a <configuration> element like this can never be overridden
>> on the command-line:
>>
>>   <skip>false</skip>
>>
>> I wonder why it was designed that way?
>>
>> Or should this be considered a bug?
>>
>> Best wishes,
>>
>> Andreas
>>
>>

Reply via email to