คำสั่ง Maven เพื่อแสดงรายการขั้นตอนวงจรชีวิตพร้อมกับเป้าหมายที่ผูกไว้?


105

ฉันเพิ่งเรียนรู้ Maven ดังนั้นสิ่งนี้อาจชัดเจน แต่ฉันไม่สามารถหาวิธีง่ายๆในการระบุเป้าหมายที่เกี่ยวข้องสำหรับแต่ละช่วงวงจรชีวิตของ maven สำหรับโครงการที่กำหนด

ผมเห็นว่า Maven ชีวิตเริ่มต้นขั้นตอนวงจรและเป้าหมายเริ่มต้นที่สอดคล้องกันมีเอกสารที่นี่ ความเข้าใจของฉันจนถึงตอนนี้คือแต่ละ pom.xml สามารถผูกเป้าหมายเพิ่มเติมกับแต่ละช่วงวงจรชีวิตได้

ดังนั้นมีคำสั่ง mvn เพื่อกำหนดเป้าหมายที่จะรันสำหรับแต่ละช่วงอายุการใช้งานสำหรับโครงการที่กำหนดหรือไม่? ถ้าไม่ฉันเดาว่าฉันต้องดู pom.xml สำหรับโครงการ maven ใหม่แต่ละโครงการเพื่อหาสิ่งนี้?

คำตอบ:


128

mvn help:describe -Dcmd=compile (หรือเฟสอื่น ๆ ที่ถูกต้อง)


4
ไม่เห็นเป้าหมายที่เชื่อมโยงกับเฟสในผลลัพธ์ของคำสั่งนี้ แต่ฉันเห็นปลั๊กอิน / เฟส
Dmitry Minkovsky

Mabye ฉันเข้าใจคำถามผิด แต่คำสั่งนี้เป็น "การค้นหาแบบย้อนกลับ" สำหรับคำถาม (แสดงทุกขั้นตอนเป้าหมายนี้อยู่)? ลิงก์ระบุว่า"แสดงรายการแอตทริบิวต์สำหรับ Maven Plugin และ / หรือเป้าหมาย (aka Mojo - Maven plain Old Java Object)"
user2039709

133

เครื่องมือ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

1
คำตอบนี้จะสมบูรณ์แบบหากเริ่มต้นด้วยความคิดเห็นของ FibreFoX
UFL1138

ฉันคิดว่าคำตอบนี้ดีกว่าคำตอบที่ได้รับการยอมรับมาก
Panayotis

ฉันเห็นด้วยกับ @Ianoxx ว่าควรเพิ่มสิ่งนี้ใน Maven โดยค่าเริ่มต้น ปลั๊กอินที่ยอดเยี่ยม!
Miguel Pardal

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

1
pom ที่มีประสิทธิภาพควรแสดงระยะการผูกมัดที่แท้จริงของแต่ละเป้าหมายซึ่งปัจจุบันไม่ได้ทำเช่นนั้น ... ถอนหายใจ ..
Junchen Liu

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

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;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.