Команда Maven перераховувати фази життєвого циклу разом із пов'язаними цілями?


104

Я просто вивчаю Мейвена, і тому це може бути очевидним, але я не можу знайти простий спосіб перерахувати цілі, пов'язані для кожної фази життєвого циклу Maven для даного проекту.

Я бачив, що тут задокументовані фази життєвого циклу за замовчуванням Maven та відповідні цілі за замовчуванням . На сьогодні я розумію, що кожен pom.xml може прив'язувати додаткові цілі до кожної фази життєвого циклу.

Отже, чи є команда mvn для визначення цілей, які будуть виконуватися для кожної фази життєвого циклу для даного проекту? Якщо ні, то, мабуть, мені просто потрібно переглянути файл pom.xml для кожного нового проекту Maven, щоб зрозуміти це?

Відповіді:


128

mvn help:describe -Dcmd=compile (або будь-яка інша дійсна фаза)


3
Не бачачи цілі, пов'язані з фазами у висновку цієї команди. Натомість я бачу плагіни / фази.
Дмитро Міньковський

Мейбі Я зрозумів питання неправильно, але ця команда - це "зворотний пошук" до питання (перерахування всіх фаз, в яких ця мета знаходиться)? посилання говорить "Відображає список атрибутів для плагіну Maven та / або цілей (він же Mojo - звичайний старий об'єкт Java Maven)."
користувач2039709

131

Це buildplan-maven-pluginвідмінний інструмент для показу, як цілі пов'язані з фазами.

Нижче наведено приклади команд, які можна виконати. Команди автоматично завантажують та встановлюють плагін, якщо він ще не встановлений.

Перерахуйте цілі за порядком, який вони будуть виконувати

> 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

Групуйте цілі по етапах

> 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

Групуйте цілі за допомогою плагіна

> 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

Примітки

За замовчуванням цілі шукають завдання, які виконуватимуться, якщо користувач звернувся mvn deploy. Фази, такі як cleanне включаються. Щоб включити кілька етапів у пошук, використовуйте buildplan.tasksвластивість:

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

33
Це дійсно має бути вбудовано в Maven за замовчуванням.
lanoxx

5
також працює без коригування пом:mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list -Dbuildplan.tasks=clean,install,deploy
FibreFoX

1
Ця відповідь була б ідеальною, якби вона почалася з коментаря FibreFoX.
UFL1138

Я думаю, що ця відповідь набагато краща, ніж прийнята відповідь.
Панайотис

Я погоджуюся з @Ianoxx, що це слід додати до Maven за замовчуванням. Чудовий плагін!
Мігель Пардал

18

Один з інструментів, який допомагає, - mvn help:effective-pomце надрукувати POM з усіма змінними та розширеними всіма батьківськими POM Це допомагає зрозуміти, що бачить Мейвен. З цього досить просто знайти всі додаткові цілі (яких зазвичай не так багато).

Більшою проблемою є неявні цілі (тобто коли плагін автоматично підключається до деяких фаз життєвого циклу). Немає простого способу побачити їх без фактичного запуску Maven. Це повинно стати кращим у Maven 3. До цього часу запустіть Maven, за допомогою -Xякого буде надруковано багато виводу налагодження плюс поточну фазу та які плагіни виконуються.


Спасибі, Аароне, це було корисно!
Upgradingdave

Як це стає кращим у Maven 3? Це в нинішньому альфа-6?
Ларс Корнеліуссен

2
Джейсон сказав мені, що новий Maven 3 побудує модель цілої збірки, перш ніж її реально розпочати. Це означає, що ви можете оглянути (і роздрукувати) гачки, не виконуючи команди.
Аарон Дігулла

ефективний пом повинен показати фактичну фазу зв’язку кожної мети, яка наразі не робить цього ... зітхнути ..
Junchen Лю

1

Якщо не з Maven, але за допомогою m2e, ви можете зробити це за допомогою блоку коду, який ви можете використовувати в плагіні 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);
                }

Подивіться на повне джерело .

Вже реалізовано в:

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

Він використовує здатність m2e для обчислення асоціації цілей з фазами. Я також намагаюся вирішити це на рівні Maven.


Будь ласка, не публікуйте лише відповіді на посилання
біш

1

Я помістив відповідь Чада в сценарій (тому мені не потрібно пам’ятати ім'я плагіна, яке дуже довге). Помістіть його у свою папку ~ / bin /, щоб ви могли використовувати її будь-де.

#!/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;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.