Команда Maven для перечисления этапов жизненного цикла вместе с привязанными целями?
Я просто изучаю Maven, и поэтому это может быть очевидно, но я не могу найти простой способ перечислить цели, связанные с каждой фазой жизненного цикла maven для данного проекта.
Я видел, что фазы жизненного цикла Maven по умолчанию и соответствующие цели по умолчанию документированы здесь. Мое понимание до сих пор заключается в том, что каждый пом.xml может привязывать дополнительные цели к каждой фазе жизненного цикла.
Итак, есть ли команда mvn для определения целей, которые будут выполняться каждый этап жизненного цикла для данного проекта? Если нет, я думаю, мне просто нужно посмотреть через пом.xml для каждого нового проекта maven, чтобы понять это?
5 ответов:
The
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
один инструмент, который помогает
mvn help:effective-pom
Он будет печатать POM со всеми переменными и все родительские POMs расширены. Это помогает понять, что видит Maven. Из этого довольно просто найти все дополнительные цели (которых обычно не так много).большая проблема-это неявные цели (т. е. когда плагин автоматически подключается к некоторым фазам жизненного цикла). Нет простого способа увидеть их без фактического запуска Maven. Это должно стать лучше в Maven 3. До тех пор, запустить Maven с
-X
который будет печатать много отладочного вывода плюс текущую фазу и какие плагины выполняются.
если не с 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); }
посмотрите на full источник.
уже реализованы в:
http://marketplace.eclipse.org/content/phases-and-goals
Он использует способность m2e вычислять ассоциацию целей с фазами. Я также пытаюсь решить ее на уровне maven.
Я поместил ответ чада в скрипт (поэтому мне не нужно запоминать имя плагина, которое действительно длинное). Поместите его в папку ~/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 ) 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;