Hi Ted,

You can definitely specify configuration inside execution according to the 
advice here:  
http://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_executions_Tag
 
<http://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_executions_Tag>

You may want to rethink the phase — the default phase binding is for verify, 
not compile.  I suggest sticking with the default.  In your example, the “test 
set” is running before the test-compile phase — your test-compile phase should 
be successful before running PMD against it.

I have done something similar in the past where I had the PMD plugin declared 
twice — once in the <build> section with “required” rules that will fail the 
build when violated, and then again in the <reporting> section with “thorough” 
rules that will report a more comprehensive set of advice (as a report).  Is 
this really what you need?

To help debug, I recommend reviewing the effective-pom (mvn 
help:effective-pom), and running mvn with the -X debug switch. 

Hope this helps,

Anthony


> On Oct 17, 2019, at 11:37 PM, Ted Petersson <[email protected]> wrote:
> 
> Hi all,
> is there any way to run the maven-pmd-plugin on both the main and test
> code, but with different rulesets?
> 
> It does not seem to be possible to run 2 executions with different
> ruleset configurations...
> 
> What I have:
> ...
>  <build>
>    <plugins>
>      <plugin>
>        <artifactId>maven-pmd-plugin</artifactId>
>        <version>3.12.0</version>
>        <configuration>
>          <rulesets>
>            <ruleset>pmd-rules.xml</ruleset>
>          </rulesets>
>          <printFailingErrors>true</printFailingErrors>
>          <includeTests>true</includeTests>
>        </configuration>
> 
>        <executions>
>          <execution>
>            <id>pmd-check</id>
>            <phase>compile</phase>
>            <goals>
>              <goal>check</goal>
>              <goal>cpd-check</goal>
>            </goals>
>          </execution>
>        </executions>
>      </plugin>
>    </plugins>
>  </build>
> 
> I would like to have is something like this:
> ...
>  <build>
>    <plugins>
>      <plugin>
>        <artifactId>maven-pmd-plugin</artifactId>
>        <version>3.12.0</version>
>        <configuration>
>          <rulesets>
>            <ruleset>pmd-rules.xml</ruleset>
>          </rulesets>
>          <printFailingErrors>true</printFailingErrors>
>        </configuration>
> 
>        <executions>
>          <execution>
>            <id>pmd-main-check</id>
>            <phase>compile</phase>
>            <goals>
>              <goal>check</goal>
>              <goal>cpd-check</goal>
>            </goals>
>            <configuration>
>              <rulesets>
>                <ruleset>pmd-main-rules.xml</ruleset>  <!-- "normal" rules
> -->
>              </rulesets>
>            </configuration>
>          </execution>
> 
>          <execution>
>            <id>pmd-test-check</id>
>            <phase>compile</phase>
>            <goals>
>              <goal>check</goal>
>              <goal>cpd-check</goal>
>            </goals>
>            <configuration>
>              <rulesets>
>                <ruleset>pmd-test-rules.xml</ruleset>  <!-- less strict
> rules for the tests -->
>              </rulesets>
>              <includeTests>true</includeTests>
>            </configuration>
>          </execution>
>        </executions>
>      </plugin>
>    </plugins>
>  </build>
> 
> But it does not seem to be possible to have ruleset-configuration
> inside an execution tag. Is it possible to solve this in any way?
> 
> /Ted

Reply via email to