Commande Maven pour répertorier les phases du cycle de vie avec les objectives liés?

J’apprends seulement Maven, et cela peut être évident, mais je ne trouve pas de moyen facile de lister les objectives associés à chaque phase du cycle de vie de maven pour un projet donné.

J’ai vu que les phases de cycle de vie par défaut de Maven et les objectives par défaut correspondants sont documentés ici . Ma compréhension jusqu’à présent est que chaque fichier pom.xml peut lier des objectives supplémentaires à chaque phase du cycle de vie.

Existe-t-il une commande mvn pour déterminer les objectives à exécuter pour chaque phase du cycle de vie d’un projet? Si ce n’est pas le cas, je suppose que je dois simplement parcourir le fichier pom.xml pour chaque nouveau projet Maven afin de le comprendre?

mvn help:describe -Dcmd=comstack (ou toute autre phase valide)

Le buildplan-maven-plugin est un excellent outil pour montrer comment les objectives sont liés aux phases.

Vous trouverez ci-dessous des exemples de commandes que vous pouvez exécuter. Les commandes téléchargeront et installeront automatiquement le plug-in s’il n’a pas encore été installé.

Liste des objectives par ordre d’exécution

 > 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-comstackr-plugin | comstack | default-comstack | comstack maven-resources-plugin | process-test-resources | default-testResources | testResources maven-comstackr-plugin | test-comstack | default-testComstack | testComstack 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 comstack ------------------------------------------------------------------ + maven-comstackr-plugin | default-comstack | comstack process-test-resources --------------------------------------------------- + maven-resources-plugin | default-testResources | testResources test-comstack ------------------------------------------------------------- + maven-comstackr-plugin | default-testComstack | testComstack 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 plugin

 > 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-comstackr-plugin --------------------------------------------------- + comstack | default-comstack | comstack + test-comstack | default-testComstack | testComstack 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 objectives recherchent les tâches qui s’exécuteraient si l’utilisateur invoquait mvn deploy . Les phases telles que clean ne seront pas incluses. 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 l’aide mvn help:effective-pom Il va imprimer le POM avec toutes les variables et tous les POM parents développés. Cela aide à comprendre ce que voit Maven. De là, il est assez simple de trouver tous les objectives supplémentaires (qui ne sont généralement pas si nombreux).

Le plus gros problème réside dans les objectives implicites (c.-à-d. Lorsqu’un plugin se connecte automatiquement à certaines phases du cycle de vie). Il n’y a pas de moyen facile de les voir sans réellement utiliser Maven. Cela devrait être mieux dans Maven 3. Jusque-là, lancez Maven avec -X ce qui imprimera beaucoup de résultats de débogage, plus la phase en cours et les plug-ins exécutés.

Si ce n’est pas avec Maven mais avec m2e, vous pouvez le faire en utilisant le bloc de code que vous pouvez utiliser dans un plugin Eclipse:


 final IMavenProjectRegistry projectRegistry = MavenPlugin.getMavenProjectRegistry(); final IMavenProjectFacade facade = projectRegistry.getProject(project); projectRegistry.execute(facade, new ICallable() { public Void call(IMavenExecutionContext context, IProgressMonitor monitor) throws CoreException { MavenProject mavenProject = facade.getMavenProject(monitor); List mojoExecutions = ((MavenProjectFacade) facade).getMojoExecutions(monitor); LifecycleMappingResult mappingResult = LifecycleMappingFactory.calculateLifecycleMapping( mavenProject, mojoExecutions, facade.getResolverConfiguration().getLifecycleMappingId(), monitor); Map> mojoExecutionMapping = mappingResult .getMojoExecutionMapping(); Map> phases = new LinkedHashMap>(); for (MojoExecutionKey execution : mojoExecutionMapping.keySet()) { List executions = phases.get(execution.getLifecyclePhase()); if (executions == null) { executions = new ArrayList(); phases.put(execution.getLifecyclePhase(), executions); } executions.add(execution); } 

Regardez la source complète.

Déjà implémenté dans:

http://marketplace.eclipse.org/content/phases-and-goals

Il utilise la capacité de m2e à calculer l’association des objectives avec les phases. J’essaie aussi de le résoudre au niveau de maven.

J’ai mis la réponse de Chad dans un script (donc je n’ai pas besoin de me souvenir du nom du plugin qui est très long). Placez-le dans votre dossier ~ / bin / afin de pouvoir l’utiliser n’importe où.

 #!/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;