Difference between Maven source plugin jar and jar-no-fork goal?

jar, maven, maven-plugin

Solution

My interpretation: the `jar` goal is meant to be run from the command line (`mvn source:jar`), the `jar-no-fork` is meant to be bound to the lifecycle.

If you look at the docs for the `jar` goal the key phrase is "Invokes the execution of the lifecycle phase generate-sources prior to executing itself." If you configure your POM to run the `source:jar` goal as part of the lifecycle, Maven will re-run all of the goals bound to `generate-sources` and its predecessors. If you have many plugin goals bound to the validate or initialize phases all of those will run twice, lengthening the time of your build.

In contrast, `jar-no-fork` is what you attach to the build lifecycle because it expects to be bound to a phase somewhere after `generate-sources` and will not run the bound goals again.

I have verified this behavior by running Maven 3 with `-X` and reviewing the plugin executions that run.

Problem

Could you give me a detail explanation about the difference between jar and jar-no-fork goal? I see it from official site, but I can not get a clear idea for this.

Original source