wake-up-neo.com

Maven-Befehl, um Lebenszyklusphasen zusammen mit den festgelegten Zielen aufzulisten?

Ich lerne gerade Maven und das mag offensichtlich sein, aber ich finde keine einfache Möglichkeit, die Ziele für die einzelnen Lebenszyklusphasen von Maven für ein bestimmtes Projekt aufzulisten.

Ich habe gesehen, dass die Maven-Standardlebenszyklusphasen und die entsprechenden Standardziele dokumentiert sind hier . Mein bisheriges Verständnis ist, dass jede pom.xml zusätzliche Ziele an jede Lebenszyklusphase binden kann.

Gibt es also einen MVN-Befehl, um die Ziele zu bestimmen, die für jede Lebenszyklusphase für ein bestimmtes Projekt ausgeführt werden? Wenn nicht, muss ich wohl nur die pom.xml nach jedem neuen Maven-Projekt durchsuchen, um das herauszufinden?

90
Upgradingdave

mvn help:describe -Dcmd=compile (oder eine andere gültige Phase)

120
Akira

Das buildplan-maven-plugin ist ein hervorragendes Werkzeug, um zu zeigen, wie Ziele an Phasen gebunden sind.

Unten finden Sie Beispiele für Befehle, die Sie ausführen können. Die Befehle laden das Plugin automatisch herunter und installieren es, falls es noch nicht installiert wurde.

Listen Sie die Ziele in der Reihenfolge auf, in der sie ausgeführt werden

> 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

Gruppenziele nach 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

Gruppenziele durch 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

Anmerkungen

Standardmäßig suchen die Ziele nach Aufgaben, die ausgeführt würden, wenn der Benutzer mvn deploy Aufruft. Phasen wie clean werden nicht berücksichtigt. Verwenden Sie die Eigenschaft buildplan.tasks, Um mehrere Phasen in die Suche einzubeziehen:

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

Ein Werkzeug, das hilft, ist mvn help:effective-pom Der POM wird mit allen Variablen und allen erweiterten übergeordneten POMs gedruckt. Dies hilft zu verstehen, was Maven sieht. Daher ist es ziemlich einfach, alle zusätzlichen Ziele zu finden (die normalerweise nicht so viele sind).

Das größere Problem sind die impliziten Ziele (d. H. Wenn sich ein Plugin automatisch an einige Phasen des Lebenszyklus anschließt). Es gibt keine einfache Möglichkeit, diese zu sehen, ohne Maven auszuführen. Dies sollte in Maven 3 besser werden. Bis dahin starte Maven mit -X, der eine Menge Debug-Ausgaben sowie die aktuelle Phase ausgibt und welche Plugins ausgeführt werden.

15
Aaron Digulla

Ich habe Tschads Antwort in ein Skript geschrieben (damit ich mich nicht an den Namen des Plugins erinnern muss, der wirklich lang ist). Legen Sie es in Ihren Ordner ~/bin /, damit Sie es überall verwenden können.

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

Wenn nicht mit Maven, sondern mit m2e, können Sie dies mit dem Codeblock tun, den Sie in einem Eclipse-Plugin verwenden können:


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);
                }

Schauen Sie sich die vollständige Quelle .

Bereits implementiert in:

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

Es nutzt die Fähigkeit von m2e, die Zuordnung von Zielen zu Phasen zu berechnen. Ich versuche es auch auf Maven-Ebene zu lösen.

1
Sandip Chitale