120

I have a plugin (antrun) with an execution configured which has an id and is not bound to any phase. Can I execute this execution directly from the command line?

<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
    <execution>
      <id>my-execution</id>
      ...
    </execution>
  </executions>
</plugin>

An run it with something like:

mvn my-execution

or at least

mvn magicplugin:execute -DexecutionId=my-execution
1

3 Answers 3

164

This functionality has been implemented as MNG-5768, and is available in Maven 3.3.1.

The change will:

extend direct plugin invocation syntax to allow optional @execution-id parameter, e.g., org.apache.maven.plugins:maven-remote-resources-plugin:1.0:process@executionId.

So, in your case:

mvn antrun:run

uses the default-cli execution ID, and:

mvn antrun:run@my-execution

uses the execution configured in your pom.

Sign up to request clarification or add additional context in comments.

4 Comments

From the artifact ID "maven-antrun-plugin" how do we know that it is just "antrun" that should be used in mvn antrun:run?
@mks-d see pluginGroups for why org.apache.maven.plugins:maven-antrun-plugin can be referred to as antrun.
@Joe thanks, on top of plugin groups there is also the Plugin Prefix Resolution mechanism apparently...
Unfortunately, I can't figure out how to use this feature if the character ":" appears in the execution id. For example, the command $ mvn antrun:run@delombok-test-sources:process-test-sources:run gives an error, as well as when adding quotation marks - $ mvn "antrun:run@delombok-test-sources:process-test-sources:run" and even slash characters - $ mvn "antrun:run@delombok-test-sources\:process-test-sources\:run"....
90

The most direct means of executing your maven plugin is to specify the plugin goal directly on the command line.

mvn groupId:artifactId:version:goal

More information at: Development guide for Maven plugins

5 Comments

But how can I run exactly "default-cli" execution? If there are several executions in the plugin definition.
I was fighting to get a Spring Boot Jasypt utility plugin to run, and for whatever reason, the only way I could get it to get recognized by Maven was by following the advice above. Just specifying the goal directly (mvn jasypt:encrypt ...) wasn't enough. Thanks @dimitri-dewaele.
The question asked for running a specific execution; your answer will run all executions configured for a goal.
How do you add configuration ?
This does not answer the question of how to run an explicite execution
17

What you're looking for is captured in Default+Plugin+Execution+IDs but to my knowledge currently not supported. However, according to the comments of MNG-3401 (read them until the end):

for mojos invoked directly from the command line, you can supply configuration from the POM using the executionId: 'default-cli' 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>

This should work in Maven 2.2.0 and 3.x.

Maybe this will be enough for you.

1 Comment

that was not exactly the question event if your answer is correct ;).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.