Comando Maven per elencare le fasi del ciclo di vita insieme agli obiettivi vincolati?


104

Sto solo imparando Maven, quindi questo potrebbe essere ovvio, ma non riesco a trovare un modo semplice per elencare gli obiettivi associati a ciascuna fase del ciclo di vita di Maven per un determinato progetto.

Ho visto che le fasi del ciclo di vita predefinito di Maven e gli obiettivi predefiniti corrispondenti sono documentati qui . La mia comprensione finora è che ogni pom.xml può associare obiettivi aggiuntivi a ciascuna fase del ciclo di vita.

Quindi, esiste un comando mvn per determinare gli obiettivi che verranno eseguiti per ciascuna fase del ciclo di vita per un determinato progetto? In caso contrario, immagino che devo solo guardare attraverso il pom.xml per ogni nuovo progetto di Maven per capirlo?

Risposte:


128

mvn help:describe -Dcmd=compile (o qualsiasi altra fase valida)


3
Non vedere obiettivi legati a fasi nell'output di questo comando. Invece, vedo plug-in / fasi.
Dmitry Minkovsky

Mabye ho capito male la domanda, ma questo comando è la "ricerca inversa" della domanda (elencando tutte le fasi in cui si trova questo obiettivo)? link dice "Visualizza un elenco degli attributi per un plug-in Maven e / o obiettivi (noto anche come Mojo - Maven plain Old Java Object)."
user2039709

131

Il buildplan-maven-pluginè un ottimo strumento per mostrare come gli obiettivi sono destinati a fasi.

Di seguito sono riportati esempi di comandi che puoi eseguire. I comandi scaricheranno e installeranno automaticamente il plugin se non è già stato installato.

Elenca gli obiettivi in ​​base all'ordine in cui verranno eseguiti

> 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

Obiettivi di gruppo per 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

Obiettivi di gruppo per 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

Appunti

Per impostazione predefinita, gli obiettivi cercano attività che verrebbero eseguite se l'utente invocasse mvn deploy. Fasi come cleannon verranno incluse. Per includere più fasi nella ricerca, utilizza la buildplan.tasksproprietà:

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

33
Questo dovrebbe davvero essere integrato in Maven per impostazione predefinita.
lanoxx

5
funziona anche senza regolare il pom:mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list -Dbuildplan.tasks=clean,install,deploy
FibreFoX

1
Questa risposta sarebbe perfetta se iniziasse con il commento di FibreFoX.
UFL1138

Penso che questa risposta sia molto migliore della risposta accettata.
Panayotis

Sono d'accordo con @Ianoxx che questo dovrebbe essere aggiunto a Maven per impostazione predefinita. Ottimo plug-in!
Miguel Pardal

18

Uno strumento che aiuta è mvn help:effective-pomche stamperà il POM con tutte le variabili e tutti i POM principali espansi. Questo aiuta a capire cosa vede Maven. Da ciò, è abbastanza semplice trovare tutti gli obiettivi aggiuntivi (che di solito non sono molti).

Il problema più grande sono gli obiettivi impliciti (cioè quando un plugin si aggancia automaticamente ad alcune fasi del ciclo di vita). Non esiste un modo semplice per vederli senza eseguire effettivamente Maven. Questo dovrebbe migliorare in Maven 3. Fino ad allora, esegui Maven con il -Xquale stamperà un sacco di output di debug più la fase corrente e quali plug-in vengono eseguiti.


Grazie, Aaron, è stato utile!
Aggiornamento dal

Come sta andando meglio in Maven 3? È nell'attuale alfa-6?
Lars Corneliussen

2
Jason mi ha detto che il nuovo Maven 3 costruirà un modello dell'intera build prima di avviarlo effettivamente. Ciò significa che puoi esaminare (e stampare) gli hook senza eseguire i comandi.
Aaron Digulla

il pom effettivo dovrebbe mostrare l'effettiva fase vincolante di ciascun obiettivo che attualmente non lo sta facendo ... sigh ..
Junchen Liu

1

Se non con Maven ma usando m2e puoi farlo usando il blocco di codice che puoi usare in un plugin 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);
                }

Guarda la fonte completa .

Già implementato in:

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

Si avvale della capacità di m2e di calcolare l'associazione degli obiettivi con le fasi. Sto anche cercando di risolverlo a livello di esperto.


Si prega di non postare solo link risposte
bish

1

Ho inserito la risposta di Chad in uno script (quindi non devo ricordare il nome del plugin che è davvero lungo). Mettilo nella tua cartella ~ / bin / in modo da poterlo usare ovunque.

#!/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;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.