Search code examples
mavenpluginsmaven-2pom.xml

How do I run a specific goal with a particular configuration in a Maven plugin when I have several configurations for that goal


See plugin config from pom.xml below.

I can do:

mvn myplugin:myGoal

Which runs myGoal (both executions I suppose) but I want to be able to choose either the first or the second executions independently.

I know I can add an id to the execution element, but how do I refer to that id on the command line. I'd like to get to something which does what this imagined command does:

mvn myplugin:myGoal --executionId=1

Is this possible, or am I going about this the wrong way?

        <plugin>
            <groupId>org.myplugin</groupId>
            <artifactId>myplugin-maven-plugin</artifactId>
            <version>1.1.1</version>
            <executions>
                <execution>
                    <id>process-cats</id>
                    <goals>
                        <goal>myGoal</goal>
                    </goals>
                    <configuration>
                        <myParam>cats</myParam>
                    </configuration>
                </execution>
                <execution>
                    <id>process-dogs</id>
                    <goals>
                        <goal>myGoal</goal>
                    </goals>
                    <configuration>
                        <myParam>dogs</myParam>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Solution

  • I can do mvn myplugin:myGoal
    Which runs myGoal (both executions I suppose)

    None of them (assuming they had unique id). Executions are bound to a phase, you need to run the given phase to trigger them.

    I know I can add an id to the execution element, but how do I refer to that id on the command line.

    Not supported. What is possible for plugins invoked on the CLI is to define a non global configuration in the POM using the special default-cli executionId, like this:

    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <executions>
        <execution>
          <id>default-cli</id>
          <configuration>
            <descriptorRefs>
              <descriptorRef>jar-with-dependencies</descriptorRef>
              <descriptorRef>project</descriptorRef>
            </descriptorRefs>
          </configuration>
        </execution>
      </executions>
    </plugin>
    

    Is this possible, or am I going about this the wrong way?

    No, not possible. Either pass the parameters on the command line or use profiles (with or without the above default execution).

    References