Maven comando para listar las fases del ciclo de vida, junto con objetivos ligados?

StackOverflow https://stackoverflow.com/questions/1709625

  •  19-09-2019
  •  | 
  •  

Pregunta

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

vi que las fases del ciclo de vida por defecto Maven y los correspondientes objetivos predeterminados están documentados aquí . Mi comprensión hasta ahora es que cada uno puede unirse pom.xml objetivos adicionales a cada fase del ciclo de vida.

Por lo tanto, hay un comando mvn para determinar los objetivos que se ejecutarán para cada fase del ciclo de vida de un proyecto determinado? Si no es así, supongo que sólo hay que mirar a través de la pom.xml para cada nuevo proyecto Maven para resolver esto?

¿Fue útil?

Solución

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

Otros consejos

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

A continuación se presentan ejemplos de comandos que se pueden ejecutar. Los comandos se descargarán automáticamente e instalar el plugin si ya no se ha instalado.

Lista de objetivos por el orden en que se 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

los objetivos del grupo de 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

los objetivos del grupo de plugins

> 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

Por defecto, la búsqueda de los objetivos para las tareas que se ejecutan si el usuario invoca mvn deploy. No se incluirán las fases tales como clean. Para incluir múltiples fases en la búsqueda, utilice la propiedad buildplan.tasks:

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

Una herramienta que ayuda es mvn help:effective-pom Se imprimirá el POM con todas las variables y todos los POM matrices ampliadas. Esto ayuda a entender lo que ve Maven. A partir de eso, es bastante fácil de encontrar todos los objetivos adicionales (que por lo general no son muchos).

El problema más grande es los objetivos implícitos (es decir, cuando un plugin en sí ganchos a algunas fases del ciclo de vida de forma automática). No hay una manera fácil de ver estos sin ejecutar realmente Maven. Esto debe ser mejor en Maven 3. Hasta entonces, ejecutar Maven con -X que imprimirá un montón de salida de depuración más la corriente de fase y los plugins que se ejecutan.

Si no es así con Maven pero utilizando M2e puede hacerlo utilizando el bloque de código que se puede utilizar en un plugin para 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);
                }

buscará una absoluta fuente .

Ya implementado en:

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

Se hace uso de la capacidad de M2e para calcular la asociación de objetivos con fases. También estoy tratando de resolverlo a nivel experto.

Puedo poner la respuesta de Chad en un guión (por lo que no tengo que recordar el nombre del plugin que es muy largo). Ponerlo en su / carpeta ~ / bin para que pueda utilizarlo en cualquier lugar.

#!/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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top