Reputation: 3749
I know I can bind the assembly plugin to a "package" phase of the project but I want something different:
mvn package
it would execute without assemblymvn assembly:single
it would execute the package
phase first. I know I can do mvn package assembly:single
manually but this is verbose and error prone: if I edit the code and forget to put "package" into mvn assembly:single
, this would generate the old version of the code in the assembly, without compiling the changed code.
Upvotes: 2
Views: 741
Reputation: 5094
When running from CLI mvn package assembly:single
you must (see update) provide the required properties for the single goal which explains why would you say that it is error prone.
But, if you add the following plugin definition to your pom under build plugins section:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>default-cli</id>
<phase>never</phase> <!-- or undefined -->
<goals>
<goal>single</goal>
</goals>
<configuration>
...
</configuration>
</execution>
</executions>
</plugin>
When running mvn clean package
the assembly plugin won't run the single goal because it is not binded to any phase.
When running mvn clean package assembly:single
, after the package phase is done the assembly:single will be run with the configuration from your pom because it's execution id is default-cli
.
To correct myself, if running from CLI, the executions
tag is not only unnecessary but even semantically incorrect to use.
Just for the reference, with this plugin definition:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptor>path/to/descriptor</descriptor>
</configuration>
</plugin>
the command mvn assembly:single
is equivalent to command mvn assembly:single -Ddescriptor=path/to/descriptor
. When run it outputs to console:
[INFO] --- maven-assembly-plugin:2.4:single (default-cli) @ fm-js ---
The first definition is useful if you want to use the plugin both from command line and during some phase with different configurations.
As to your question, exactly as you asked, IMHO, it is not possible without reprogramming the plugin. My suggestion is in non-portable or portable form, respectively:
mvn package assembly:single
in a shell scriptmvn package assembly:single
Upvotes: 2