Yaşam döngüsü aşamalarını bağlı hedeflerle birlikte listelemek için Maven komutu?


104

Maven'i yeni öğreniyorum ve bu açık olabilir, ancak belirli bir proje için her bir maven yaşam döngüsü aşamasıyla ilişkili hedefleri listelemenin kolay bir yolunu bulamıyorum.

Maven varsayılan yaşam döngüsü aşamalarının ve bunlara karşılık gelen varsayılan hedeflerin burada belgelendiğini gördüm . Şimdiye kadar anladığım kadarıyla, her pom.xml, her yaşam döngüsü aşamasına ek hedefler bağlayabilir.

Öyleyse, belirli bir proje için her yaşam döngüsü aşaması için çalıştırılacak hedefleri belirlemek için bir mvn komutu var mı? Değilse, bunu anlamak için her yeni maven projesi için pom.xml'ye bakmam gerekiyor sanırım?

Yanıtlar:


128

mvn help:describe -Dcmd=compile (veya başka herhangi bir geçerli aşama)


3
Bu komutun çıktısında aşamalara bağlı hedefleri görmemek. Bunun yerine, eklentiler / aşamalar görüyorum.
Dmitry Minkovsky

Mabye Soruyu yanlış anladım, ancak bu komut soruya "ters arama" (bu hedefin içinde bulunduğu tüm aşamaları listeleyerek)? bağlantı diyor "görüntüler (Mojo aka - Maven düz Eski Java Object) Bir Maven Plugin ve / veya hedefler için kullanılan özelliklerin listesi."
user2039709

132

buildplan-maven-pluginHedefleri aşamaları bağlanmıştır gösteren için mükemmel bir araçtır.

Aşağıda çalıştırabileceğiniz komutlara örnekler verilmiştir. Komutlar, önceden kurulmamışsa eklentiyi otomatik olarak indirip kuracaktır.

Hedefleri gerçekleştirecekleri sıraya göre listeleyin

> 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

Aşamalara göre grup hedefleri

> 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

Eklentiye göre grup hedefleri

> 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

Notlar

Varsayılan olarak hedefler, kullanıcı çağrıldığında çalışacak görevleri arar mvn deploy. Gibi aşamalar cleandahil edilmeyecektir. Aramaya birden çok aşama eklemek için buildplan.tasksözelliği kullanın :

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

33
Bu, varsayılan olarak gerçekten Maven'de yerleşik olmalıdır.
lanoxx

5
ayrıca mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list -Dbuildplan.tasks=clean,install,deploy
pomu

1
Bu cevap, FibreFoX'un yorumuyla başlasaydı mükemmel olurdu.
UFL1138

Bu cevabın kabul edilen cevaptan çok daha iyi olduğunu düşünüyorum.
Panayotis

@Ianoxx ile bunun varsayılan olarak Maven'e eklenmesi gerektiği konusunda hemfikirim. Harika eklenti!
Miguel Pardal

18

Yardımcı olan bir araç, mvn help:effective-pomPOM'u tüm değişkenlerle ve tüm ana POM'ları genişletilmiş olarak yazdıracaktır. Bu, Maven'in ne gördüğünü anlamaya yardımcı olur. Bundan sonra, tüm ek hedefleri bulmak oldukça kolaydır (ki bunlar genellikle o kadar da fazla değildir).

Daha büyük sorun örtük hedeflerdir (yani bir eklenti kendini yaşam döngüsünün bazı aşamalarına otomatik olarak bağladığında). Maven'i çalıştırmadan bunları görmenin kolay bir yolu yok. Bu, Maven 3'te daha iyi hale gelecektir. O zamana kadar, -Xçok sayıda hata ayıklama çıktısı artı mevcut aşama ve hangi eklentilerin çalıştırıldığı Maven'i çalıştırın.


Teşekkürler Aaron, bu yardımcı oldu!
Upgradingdave

Maven 3'te bu nasıl daha iyi hale geliyor? Mevcut alfa-6'da mı?
Lars Corneliussen

2
Jason bana yeni Maven 3'ün aslında başlamadan önce tüm yapının bir modelini oluşturacağını söyledi. Bu, komutları çalıştırmadan kancaları inceleyebileceğiniz (ve yazdırabileceğiniz) anlamına gelir.
Aaron Digulla

etkili pom şu anda bunu yapmayan her hedefin gerçek bağlanma aşamasını göstermelidir ... ah ..
Junchen Liu

1

Maven ile değilse, ancak m2e kullanıyorsanız, bunu Eclipse eklentisinde kullanabileceğiniz kod bloğunu kullanarak yapabilirsiniz:


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

Tam kaynağa bakın .

Zaten uygulandı:

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

M2e'nin hedeflerin aşamalarla ilişkisini hesaplama yeteneğinden yararlanır. Ben de maven seviyesinde çözmeye çalışıyorum.


Lütfen sadece bağlantı göndermeyin
bish

1

Chad'in cevabını bir senaryoya koydum (bu yüzden gerçekten uzun olan eklenti adını hatırlamak zorunda kalmıyorum). ~ / Bin / klasörünüze koyun, böylece her yerde kullanabilirsiniz.

#!/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;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.