maven-2 maven-3

maven 2 - Maven comando para enumerar las fases del ciclo de vida junto con los objetivos vinculados?



maven-2 maven-3 (5)

Estoy aprendiendo Maven, por lo que esto podría ser obvio, pero no puedo encontrar una manera fácil de enumerar los objetivos asociados para cada fase de ciclo de vida de maven para un proyecto determinado.

Vi que las fases del ciclo de vida predeterminado de Maven y los objetivos predeterminados correspondientes están documentados here . Mi comprensión hasta el momento es que cada pom.xml puede unir objetivos adicionales a cada fase del ciclo de vida.

Entonces, ¿hay un comando mvn para determinar los objetivos que se ejecutarán para cada fase del ciclo de vida para un proyecto determinado? Si no, supongo que solo tengo que mirar el pom.xml de cada nuevo proyecto de maven para resolverlo.


El buildplan-maven-plugin es una herramienta excelente para mostrar cómo los objetivos están ligados a las fases.

A continuación hay ejemplos de comandos que puedes ejecutar. Los comandos descargarán automáticamente e instalarán el complemento si aún no se ha instalado.

Enumere los objetivos por orden que ejecutarán

> 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

Grupo de objetivos por fase

> 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

Objetivos del grupo por complemento

> 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

Notas

De forma predeterminada, los objetivos buscan tareas que se ejecutarían si el usuario invocó mvn deploy . Las fases como la clean no se incluirán. Para incluir múltiples fases en la búsqueda, use la propiedad buildplan.tasks :

> mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list -Dbuildplan.tasks=clean,deploy


Puse la respuesta de Chad en un guión (así que no tengo que recordar el nombre del complemento, que es realmente largo). Colóquelo en su carpeta ~ / bin / para que pueda usarlo en cualquier lugar.

#!/usr/bin/env bash # Created based on https://.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;


Si no con Maven, pero usando m2e puedes hacerlo usando el bloque de código que puedes usar en un plugin de 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); }

Mira la source completa.

Ya implementado en:

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

Utiliza la capacidad de m2e para calcular la asociación de objetivos con fases. También estoy tratando de resolverlo a nivel maven.


Una herramienta que ayuda es mvn help:effective-pom Imprimirá el POM con todas las variables y todos los POM principales expandidos. Esto ayuda a entender lo que Maven ve. A partir de eso, es bastante simple encontrar todos los objetivos adicionales (que generalmente no son tantos).

El problema más grande son los objetivos implícitos (es decir, cuando un complemento se engancha a algunas fases del ciclo de vida automáticamente). No hay una manera fácil de ver estos sin ejecutar Maven. Esto debería mejorar en Maven 3. Hasta entonces, ejecute Maven con -X que imprimirá una gran cantidad de salida de depuración más la fase actual y qué complementos se ejecutan.


mvn help:describe -Dcmd=compile (o cualquier otra fase válida)