Maven Befehl Phasen des Lebenszyklus zusammen mit gebundenen Zielen zur Liste?

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

  •  19-09-2019
  •  | 
  •  

Frage

Ich lerne gerade Maven, und so könnte dies offensichtlich sein, aber ich kann nicht eine einfache Möglichkeit finden, die Ziele für jeden Maven Lifecycle-Phase für ein bestimmtes Projekt zugeordnet aufzulisten.

sah ich, dass die Maven Standardlebenszyklusphasen und entsprechende Standard Ziele dokumentiert hier . Mein Verständnis ist so weit, dass jeder pom.xml zusätzliche Ziele zu jeder Phase des Lebenszyklus binden kann.

So gibt es einen mvn Befehl, um die Ziele zu bestimmen, die für jede Phase des Lebenszyklus für ein bestimmtes Projekt ausgeführt werden? Wenn nicht, ich denke, ich muss nur die pom.xml schauen durch für jedes neue Maven-Projekt, das herauszufinden?

War es hilfreich?

Lösung

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

Andere Tipps

Die buildplan-maven-plugin ist ein ausgezeichnetes Werkzeug für die zeigen, wie Ziele zu Phasen gebunden.

Im Folgenden sind Beispiele für Befehle, die Sie ausführen können. Die Befehle werden automatisch heruntergeladen und installiert das Plugin automatisch, wenn es nicht bereits installiert ist.

Liste Ziele durch die Reihenfolge werden sie ausführen

> 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

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

Notizen

Standardmäßig suchen die Ziele für Aufgaben, die ausgeführt werden, wenn die Benutzer mvn deploy aufgerufen. Phasen wie clean werden nicht berücksichtigt. Um mehrere Phasen in die Suche einzubeziehen, verwenden Sie die buildplan.tasks Eigenschaft:

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

Ein Werkzeug, das hilft, ist mvn help:effective-pom Es wird das POM mit allen Variablen und alle übergeordneten POMs erweitert drucken. Dies hilft zu verstehen, was Maven sieht. Von diesem, ist es ziemlich einfach, alle zusätzlichen Ziele zu finden (die in der Regel nicht so viele sind).

Das größere Problem ist die impliziten Ziele (das heißt, wenn ein Plugin Haken sich auf einige Phasen des Lebenszyklus automatisch). Es gibt keine einfache Möglichkeit, diese ohne tatsächlich ausgeführt wird Maven zu sehen. Dies sollte sich besser in Maven 3. Bis dahin laufen Maven mit -X, die eine ganze Reihe von Debug-Ausgabe sowie die aktuelle Phase und ausgeführt werden, welche Plugins gedruckt werden.

Wenn nicht mit Maven aber M2e verwenden Sie können es tun, den Codeblock verwenden, die Sie in einer 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 voll Quelle .

Bereits umgesetzt in:

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

Es nutzt M2e Fähigkeit, die Vereinigung von Zielen mit Phasen zu berechnen. Ich versuche es auch bei Maven Ebene zu lösen.

habe ich Chad Antwort in ein Skript (also muss ich nicht den Namen des Plugins erinnern, die wirklich lang ist). Legen Sie es in Ihrem ~ / bin / Ordner, so können 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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top