Maven commande pour répertorier les phases du cycle de vie ainsi que des objectifs liés?
Question
Je suis en train d'apprendre Maven, et donc cela peut être évident, mais je ne peux pas trouver un moyen facile d'énumérer les objectifs associés à chaque phase du cycle de vie Maven pour un projet donné.
J'ai vu que les phases du cycle de vie par défaut Maven et objectifs par défaut correspondants sont documentés ici . Ma compréhension à ce jour est que chaque pom.xml peut lier des objectifs supplémentaires à chaque phase du cycle de vie.
Alors, est-il une commande mvn pour déterminer les objectifs qui seront exécutés pour chaque phase du cycle de vie d'un projet donné? Sinon, je crois que je viens de regarder à travers le pom.xml pour chaque nouveau projet Maven pour comprendre cela?
La solution
mvn help:describe -Dcmd=compile
(ou toute autre phase valide)
Autres conseils
Le buildplan-maven-plugin
est un excellent outil pour montrer comment les objectifs sont liés à des phases.
Voici des exemples de commandes que vous pouvez exécuter. Les commandes seront automatiquement télécharger et installer le plug-in si elle n'a pas déjà été installé.
Liste des objectifs de l'ordre dans lequel ils exécuteront
> mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list
PLUGIN | PHASE | ID | GOAL
--------------------------------------------------------------------------------------------
maven-enforcer-plugin | validate | default | enforce
maven-dependency-plugin | process-sources | default | copy-dependencies
maven-resources-plugin | process-resources | default-resources | resources
maven-compiler-plugin | compile | default-compile | compile
maven-resources-plugin | process-test-resources | default-testResources | testResources
maven-compiler-plugin | test-compile | default-testCompile | testCompile
maven-surefire-plugin | test | default-test | test
maven-jar-plugin | package | default-jar | jar
maven-assembly-plugin | package | make-assembly | single
maven-install-plugin | install | default-install | install
maven-deploy-plugin | deploy | default-deploy | deploy
Objectifs du groupe par phase
> mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list-phase
validate -----------------------------------------------------------------
+ maven-enforcer-plugin | default | enforce
process-sources ----------------------------------------------------------
+ maven-dependency-plugin | default | copy-dependencies
process-resources --------------------------------------------------------
+ maven-resources-plugin | default-resources | resources
compile ------------------------------------------------------------------
+ maven-compiler-plugin | default-compile | compile
process-test-resources ---------------------------------------------------
+ maven-resources-plugin | default-testResources | testResources
test-compile -------------------------------------------------------------
+ maven-compiler-plugin | default-testCompile | testCompile
test ---------------------------------------------------------------------
+ maven-surefire-plugin | default-test | test
package ------------------------------------------------------------------
+ maven-jar-plugin | default-jar | jar
+ maven-assembly-plugin | make-assembly | single
install ------------------------------------------------------------------
+ maven-install-plugin | default-install | install
deploy -------------------------------------------------------------------
+ maven-deploy-plugin | default-deploy | deploy
objectifs du groupe par plug-in
> mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list-plugin
maven-enforcer-plugin ---------------------------------------------------
+ validate | default | enforce
maven-dependency-plugin -------------------------------------------------
+ process-sources | default | copy-dependencies
maven-resources-plugin --------------------------------------------------
+ process-resources | default-resources | resources
+ process-test-resources | default-testResources | testResources
maven-compiler-plugin ---------------------------------------------------
+ compile | default-compile | compile
+ test-compile | default-testCompile | testCompile
maven-surefire-plugin ---------------------------------------------------
+ test | default-test | test
maven-jar-plugin --------------------------------------------------------
+ package | default-jar | jar
maven-assembly-plugin ---------------------------------------------------
+ package | make-assembly | single
maven-install-plugin ----------------------------------------------------
+ install | default-install | install
maven-deploy-plugin -----------------------------------------------------
+ deploy | default-deploy | deploy
Remarques
Par défaut, les objectifs de recherche pour les tâches qui courraient si l'utilisateur a invoqué mvn deploy
. Les phases telles que clean
ne seront pas inclus. Pour inclure plusieurs phases dans la recherche, utilisez la propriété buildplan.tasks
:
> mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list -Dbuildplan.tasks=clean,deploy
Un outil qui aide est mvn help:effective-pom
Il imprime le POM avec toutes les variables et tous POMs parents élargis. Cela aide à comprendre ce que voit Maven. De là, il est assez simple de trouver tous les objectifs supplémentaires (qui ne sont généralement pas que beaucoup).
Le plus grand problème est les objectifs implicites (à savoir quand un des crochets de plugin lui-même à certaines phases du cycle de vie automatiquement). Il n'y a pas moyen facile de voir ceux-ci sans réellement en cours d'exécution Maven. Cela devrait être mieux dans Maven 3. Jusque-là, l'exécution de Maven -X
qui imprime beaucoup de sortie de débogage plus la phase actuelle et quels plug-ins sont exécutés.
Dans le cas contraire avec Maven, mais en utilisant M2e vous pouvez le faire en utilisant le bloc de code que vous pouvez utiliser dans un plug-in Eclipse:
final IMavenProjectRegistry projectRegistry = MavenPlugin.getMavenProjectRegistry();
final IMavenProjectFacade facade = projectRegistry.getProject(project);
projectRegistry.execute(facade, new ICallable<Void>() {
public Void call(IMavenExecutionContext context, IProgressMonitor monitor) throws CoreException {
MavenProject mavenProject = facade.getMavenProject(monitor);
List<MojoExecution> mojoExecutions = ((MavenProjectFacade) facade).getMojoExecutions(monitor);
LifecycleMappingResult mappingResult = LifecycleMappingFactory.calculateLifecycleMapping(
mavenProject, mojoExecutions, facade.getResolverConfiguration().getLifecycleMappingId(),
monitor);
Map<MojoExecutionKey, List<IPluginExecutionMetadata>> mojoExecutionMapping = mappingResult
.getMojoExecutionMapping();
Map<String, List<MojoExecutionKey>> phases = new LinkedHashMap<String, List<MojoExecutionKey>>();
for (MojoExecutionKey execution : mojoExecutionMapping.keySet()) {
List<MojoExecutionKey> executions = phases.get(execution.getLifecyclePhase());
if (executions == null) {
executions = new ArrayList<MojoExecutionKey>();
phases.put(execution.getLifecyclePhase(), executions);
}
executions.add(execution);
}
Regardez complet Source .
Déjà mis en œuvre:
http://marketplace.eclipse.org/content/phases-and-goals
Il utilise la capacité de M2e de calculer l'association des buts avec des phases. Je suis également en train de le résoudre au niveau Maven.
Je mis la réponse du Tchad dans un script (donc je n'ai pas de se rappeler le nom du plug-in qui est très long). Mettez-le dans votre dossier ~ / bin / dossier afin que vous puissiez l'utiliser partout.
#!/usr/bin/env bash
# Created based on https://stackoverflow.com/a/35610377/529256
debug=false
goal='list-phase'
build_plan='clean,deploy'
working_directories=""
for (( i=1; i<=$#; i++ )) do
case ${!i} in
-h|--help)
programName=$( basename ${0} )
echo "Lists the goals of mvn project(s) by phase in a table";
echo
echo "Usage:";
echo " ${programName} -d|--debug -g|--goal goal -b|--build_plan build_plan [*directory]";
echo
echo " --goal The goal for the buildplan-maven-plugin (default: $goal)"
echo " (possible values: list, list-plugin, list-phase)"
echo
echo " --build_plan The value of the buildplan.tasks parameter (default: $build_plan)"
echo " (examples: 'clean,install', 'deploy', 'install', etc...) "
echo
echo " [*directory] The directories (with pom.xml files) to run the command in"
exit 0;
;;
-d|--debug)
debug=true;
echo "debug = ${debug}";
;;
-b|--build_plan)
((i++))
build_plan="${!i}"
;;
-g|--goal)
((i++))
goal="${!i}"
;;
*)
working_directory="${!i}";
if [ ! -e "${working_directory}" ]; then
echo "'${working_directory}' doesn't exist";
exit 1;
fi;
if [ -z "${working_directories}" ]; then
working_directories="$working_directory"
else
working_directories="$working_directories ${!i}"
fi;
;;
esac;
done;
if [ -z "${working_directories}" ]; then
working_directories="$PWD"
fi
if [ ${debug} = true ]; then
echo "working_directories=$working_directories"
echo "goal=$goal"
echo "build_plan=$build_plan"
fi
for workingDirectory in ${working_directories}; do
pushd ${workingDirectory} > /dev/null
echo "cd $workingDirectory"
echo "mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:${goal} -Dbuildplan.tasks=${build_plan}"
mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:${goal} -Dbuildplan.tasks=${build_plan}
popd > /dev/null
done;