web-dev-qa-db-fra.com

Commande Maven pour répertorier les phases du cycle de vie ainsi que les objectifs liés?

J'apprends juste Maven, et cela peut donc être évident, mais je ne trouve pas de moyen facile de répertorier les objectifs associés à chaque phase du cycle de vie de Maven pour un projet donné.

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

Existe-t-il donc 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 suppose que je n'ai qu'à parcourir le pom.xml pour chaque nouveau projet maven pour comprendre cela?

90
Upgradingdave

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

120
Akira

Le buildplan-maven-plugin est un excellent outil pour montrer comment les objectifs 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 plugin s'il n'a pas déjà été installé.

Énumérer les objectifs 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-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 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-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 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 le buildplan.tasks propriété:

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

Un outil qui aide est mvn help:effective-pom Il imprimera 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 objectifs supplémentaires (qui ne sont généralement pas si nombreux).

Le plus gros problème est les objectifs implicites (c'est-à-dire lorsqu'un plugin se connecte automatiquement à certaines phases du cycle de vie). Il n'y a pas de moyen facile de les voir sans exécuter Maven. Cela devrait s'améliorer dans Maven 3. Jusque-là, exécutez Maven avec -X qui affichera beaucoup de sortie de débogage plus la phase actuelle et quels plugins sont exécutés.

15
Aaron Digulla

J'ai mis la réponse de Chad dans un script (donc je n'ai pas à me souvenir du nom du plugin qui est vraiment long). Mettez-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;
1
Craig

Si ce n'est pas avec Maven mais en utilisant 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<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 plein source .

Déjà implémenté dans:

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

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

1
Sandip Chitale