25
votes

I am trying to setup the enforcer plugin for maven to enforce a minimum Java version. However, whenever I try to run mvn enforcer:enforce, I get:

The parameters 'rules' for goal org.apache.maven.plugins:maven-enforcer-plugin:1.3.1:enforce are missing or invalid

Here is the relevant portion of my pom file:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>1.3.1</version>
    <executions>
        <execution>
            <id>enforce-java</id>
            <phase>validate</phase>
            <goals>
                <goal>enforce</goal>
            </goals>
            <configuration>
                <rules>
                    <requireJavaVersion>
                        <version>(1.7.0-20,)</version>
                    </requireJavaVersion>
                </rules>
            </configuration>
        </execution>
    </executions>
</plugin>

I also tried replacing the <requireJavaVersion> block with <alwaysPass/>, in case something was invalid, but it still failed with the same error.

3
Possible duplicate of usage of maven enforcer pluginacm
@acm in my case the solution was the default-cli parameter, part of the accepted answer here. Less obvious in stackoverflow.com/questions/6754974/…louisgab
doesnt work, I always get error Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce (default-cli) on project : No rules are configured. Use the skip flag if you want to disable execution.Govind Kalyankar
This this is really helpful.Diablo

3 Answers

34
votes

It may be that you are using invalid rule names. Check out the rules page. The rule names are case sensitive. Though this is not the case here.

---- Edit ----

Note that the POM configuration has an execution ID of enforce-java and that execution is bound to the validate phase of the lifecycle. The command mvn enforcer:enforce is running a goal, not a phase in the lifecycle. The configuration you provided in the POM doesn't apply to the enforcer:enforce goal.

There are two ways to make this work. Which one you choose depends on what you need.

  1. If you are just trying to test the enforcer plugin configuration without running the whole build, run mvn validate.
  2. If the requirement is that mvn enforcer:enforce works, then change the execution ID to default-cli.
0
votes

I encountered this precise same error while trying to build vertx workshop project. As it turns out, the error is primarily an enforcer plugin version related issue. This following configuration solved it for me.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-enforcer-plugin</artifactId>
  <version>3.0.0-M3</version><!--$NO-MVN-MAN-VER$-->
  <executions>
    <execution>
      <id>enforce-java</id>
      <phase>enforce</phase>
      <goals>
        <goal>enforce</goal>
      </goals>
      <configuration>
        <rules>
          <requireJavaVersion>
            <version>(1.8.0,)</version>
          </requireJavaVersion>
        </rules>
      </configuration>
    </execution>
  </executions>
</plugin>
0
votes

In my case the problem was that I was putting the enforcer configuration inside the build part of a Maven profile which was not being built when I ran mvn validate. A simple mvn validate -P correctProfile fixed it for me. In the end I put it into the parent project of a multi-module application, set the transitive search of bytecode enforcer rule to true: <searchTransitive>true</searchTransitive> and verified that an incorrect dependency in a child project indeed causes a build failure.