Lệnh Maven để liệt kê các giai đoạn vòng đời cùng với các mục tiêu bị ràng buộc?


104

Tôi chỉ đang học Maven, và vì vậy điều này có thể hiển nhiên, nhưng tôi không thể tìm ra cách dễ dàng để liệt kê các mục tiêu liên quan đến từng giai đoạn vòng đời của maven cho một dự án nhất định.

Tôi thấy rằng các giai đoạn vòng đời mặc định của Maven và các mục tiêu mặc định tương ứng được ghi lại ở đây . Sự hiểu biết của tôi cho đến nay là mỗi pom.xml có thể ràng buộc các mục tiêu bổ sung cho mỗi giai đoạn vòng đời.

Vì vậy, có lệnh mvn để xác định các mục tiêu sẽ được chạy cho mỗi giai đoạn vòng đời của một dự án nhất định không? Nếu không, tôi đoán tôi chỉ cần xem qua pom.xml cho mỗi dự án maven mới để tìm ra điều này?

Câu trả lời:


128

mvn help:describe -Dcmd=compile (hoặc bất kỳ giai đoạn hợp lệ nào khác)


3
Không thấy các mục tiêu bị ràng buộc với các giai đoạn trong đầu ra của lệnh này. Thay vào đó, tôi đang thấy các plugin / giai đoạn.
Dmitry Minkovsky,

Mabye Tôi đã hiểu câu hỏi sai, nhưng lệnh này là "tra cứu ngược" cho câu hỏi (Liệt kê tất cả các giai đoạn mà mục tiêu này nằm trong)? liên kết nói "Hiển thị một danh sách các thuộc tính cho một Maven Plugin và / hoặc mục tiêu (aka Mojo - Maven Plain Old Java Object)."
user2039709

131

Đây buildplan-maven-pluginlà một công cụ tuyệt vời để hiển thị cách các mục tiêu liên kết với các giai đoạn.

Dưới đây là ví dụ về các lệnh bạn có thể chạy. Các lệnh sẽ tự động tải xuống và cài đặt plugin nếu nó chưa được cài đặt.

Liệt kê các mục tiêu theo thứ tự chúng sẽ thực hiện

> 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

Nhóm mục tiêu theo giai đoạn

> 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

Nhóm mục tiêu theo 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

Ghi chú

Theo mặc định, các mục tiêu tìm kiếm các tác vụ sẽ chạy nếu người dùng gọi mvn deploy. Các giai đoạn như vậy cleansẽ không được bao gồm. Để bao gồm nhiều giai đoạn trong tìm kiếm, hãy sử dụng thuộc buildplan.taskstính:

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

33
Điều này thực sự nên được tích hợp vào Maven theo mặc định.
lanoxx

5
cũng hoạt động mà không cần điều chỉnh pom:mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list -Dbuildplan.tasks=clean,install,deploy
FibreFoX

1
Câu trả lời này sẽ hoàn hảo nếu nó bắt đầu bằng nhận xét của FibreFoX.
UFL1138

Tôi nghĩ câu trả lời này tốt hơn nhiều so với câu trả lời được chấp nhận.
Panayotis

Tôi đồng ý với @Ianoxx rằng điều này nên được thêm vào Maven theo mặc định. Trình cắm tuyệt vời!
Miguel Pardal

18

Một công cụ hữu ích là mvn help:effective-pomNó sẽ in POM với tất cả các biến và tất cả các POM mẹ được mở rộng. Điều này giúp hiểu những gì Maven nhìn thấy. Từ đó, khá đơn giản để tìm tất cả các mục tiêu bổ sung (thường không nhiều lắm).

Vấn đề lớn hơn là các mục tiêu ngầm định (tức là khi một plugin tự động kết nối với một số giai đoạn của vòng đời). Không có cách nào dễ dàng để xem những thứ này mà không thực sự chạy Maven. Điều này sẽ trở nên tốt hơn trong Maven 3. Cho đến lúc đó, hãy chạy Maven với -Xnó sẽ in ra rất nhiều đầu ra gỡ lỗi cộng với giai đoạn hiện tại và plugin nào được thực thi.


Cảm ơn, Aaron, điều này rất hữu ích!
Nâng cấp

Làm thế nào để điều này trở nên tốt hơn trong Maven 3? Nó có ở alpha-6 hiện tại không?
Lars Corneliussen

2
Jason nói với tôi rằng Maven 3 mới sẽ xây dựng một mô hình của toàn bộ bản dựng trước khi thực sự bắt đầu nó. Điều đó có nghĩa là bạn có thể kiểm tra (và in) các hook mà không cần chạy lệnh.
Aaron Digulla

các pom hiệu quả sẽ hiển thị các giai đoạn thực tế ràng buộc của mỗi mục tiêu đó hiện đang không làm điều đó ... tiếng thở dài ..
Junchen Liu

1

Nếu không sử dụng Maven nhưng sử dụng m2e, bạn có thể thực hiện bằng cách sử dụng khối mã mà bạn có thể sử dụng trong plugin 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);
                }

Nhìn vào nguồn đầy đủ .

Đã được triển khai trong:

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

Nó sử dụng khả năng của m2e để tính toán sự liên kết của các mục tiêu với các pha. Tôi cũng đang cố gắng giải quyết nó ở cấp maven.


Xin đừng post link chỉ trả lời
bish

1

Tôi đặt câu trả lời của Chad vào một tập lệnh (vì vậy tôi không phải nhớ tên plugin thực sự dài). Đặt nó vào thư mục ~ / bin / của bạn để bạn có thể sử dụng nó ở bất cứ đâu.

#!/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;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.