바운드 목표와 함께 수명주기 단계를 나열하는 Maven 명령?


104

나는 Maven을 배우는 중이므로 이것은 명백 할 수 있지만 주어진 프로젝트의 각 Maven 수명주기 단계와 관련된 목표를 나열하는 쉬운 방법을 찾을 수 없습니다.

Maven 기본 수명주기 단계와 해당 기본 목표가 여기 에 문서화되어 있음을 확인 했습니다 . 지금까지 내 이해는 각 pom.xml이 각 수명주기 단계에 추가 목표를 바인딩 할 수 있다는 것입니다.

그렇다면 주어진 프로젝트의 각 수명주기 단계에서 실행될 목표를 결정하는 mvn 명령이 있습니까? 그렇지 않다면 나는 이것을 알아 내기 위해 각각의 새로운 메이븐 프로젝트에 대해 pom.xml을 살펴 봐야한다고 생각한다.

답변:


128

mvn help:describe -Dcmd=compile (또는 다른 유효한 단계)


3
이 명령의 출력에서 ​​단계에 바인딩 된 목표가 표시되지 않습니다. 대신 플러그인 / 단계가 표시됩니다.
Dmitry Minkovsky

Mabye 질문을 잘못 이해했지만이 명령은 질문에 대한 "역 조회"입니까 (이 목표가있는 모든 단계 나열)? 링크"Maven 플러그인 및 / 또는 목표에 대한 속성 목록을 표시합니다 (일명 Mojo-Maven 일반 Old Java Object)."
user2039709 2011

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
또한 pom을 조정하지 않고 작동합니다.mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list -Dbuildplan.tasks=clean,install,deploy
FibreFoX 2016 년

1
이 답변은 FibreFoX의 의견으로 시작하면 완벽 할 것입니다.
UFL1138

나는이 대답이 받아 들여진 대답보다 훨씬 낫다고 생각한다.
Panayotis

기본적으로 Maven에 추가되어야한다는 @Ianoxx에 동의합니다. 훌륭한 플러그인!
Miguel Pardal 2018 년

18

도움이되는 한 가지 도구는 mvn help:effective-pom 모든 변수와 모든 상위 POM을 확장하여 POM을 인쇄한다는 것입니다. 이것은 Maven이 보는 것을 이해하는 데 도움이됩니다. 그로부터 모든 추가 목표를 찾는 것은 매우 간단합니다 (일반적으로 그렇게 많지 않음).

더 큰 문제는 암시 적 목표 (즉, 플러그인이 자동으로 라이프 사이클의 일부 단계에 연결되는 경우)입니다. 실제로 Maven을 실행하지 않고는 쉽게 볼 수있는 방법이 없습니다. 이것은 Maven 3에서 더 나아질 것입니다. 그때까지 Maven을 실행 -X하면 많은 디버그 출력과 현재 단계 및 실행되는 플러그인이 인쇄됩니다.


고마워, 애런, 도움이 됐어!
Upgradingdave

Maven 3에서 어떻게 개선되고 있습니까? 현재 알파 -6에 있습니까?
Lars Corneliussen

2
Jason은 새로운 Maven 3이 실제로 시작하기 전에 전체 빌드의 모델을 빌드 할 것이라고 말했습니다. 즉, 명령을 실행하지 않고도 후크를 검사 (및 인쇄) 할 수 있습니다.
Aaron Digulla 2010 년

유효 치어는 현재 그 일을하지 않는 각 목표의 실제 결합 상 ... 한숨 ... 표시해야합니다
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 수준에서 해결하려고 노력하고 있습니다.


링크 전용 답변을 게시하지 마십시오
bish jul.

1

나는 Chad의 대답을 스크립트에 넣었습니다 (그래서 정말 긴 플러그인 이름을 기억할 필요가 없습니다). ~ / 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;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.