maven 2 - Maven comando para enumerar las fases del ciclo de vida junto con los objetivos vinculados?
maven-2 maven-3 (5)
Estoy aprendiendo Maven, por lo que esto podría ser obvio, pero no puedo encontrar una manera fácil de enumerar los objetivos asociados para cada fase de ciclo de vida de maven para un proyecto determinado.
Vi que las fases del ciclo de vida predeterminado de Maven y los objetivos predeterminados correspondientes están documentados here . Mi comprensión hasta el momento es que cada pom.xml puede unir objetivos adicionales a cada fase del ciclo de vida.
Entonces, ¿hay un comando mvn para determinar los objetivos que se ejecutarán para cada fase del ciclo de vida para un proyecto determinado? Si no, supongo que solo tengo que mirar el pom.xml de cada nuevo proyecto de maven para resolverlo.
El buildplan-maven-plugin
es una herramienta excelente para mostrar cómo los objetivos están ligados a las fases.
A continuación hay ejemplos de comandos que puedes ejecutar. Los comandos descargarán automáticamente e instalarán el complemento si aún no se ha instalado.
Enumere los objetivos por orden que ejecutará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
Grupo de objetivos por fase
> 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
Objetivos del grupo por complemento
> 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
Notas
De forma predeterminada, los objetivos buscan tareas que se ejecutarían si el usuario invocó mvn deploy
. Las fases como la clean
no se incluirán. Para incluir múltiples fases en la búsqueda, use la propiedad buildplan.tasks
:
> mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list -Dbuildplan.tasks=clean,deploy
Puse la respuesta de Chad en un guión (así que no tengo que recordar el nombre del complemento, que es realmente largo). Colóquelo en su carpeta ~ / bin / para que pueda usarlo en cualquier lugar.
#!/usr/bin/env bash
# Created based on https://.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;
Si no con Maven, pero usando m2e puedes hacerlo usando el bloque de código que puedes usar en un plugin de 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);
}
Mira la source completa.
Ya implementado en:
http://marketplace.eclipse.org/content/phases-and-goals
Utiliza la capacidad de m2e para calcular la asociación de objetivos con fases. También estoy tratando de resolverlo a nivel maven.
Una herramienta que ayuda es mvn help:effective-pom
Imprimirá el POM con todas las variables y todos los POM principales expandidos. Esto ayuda a entender lo que Maven ve. A partir de eso, es bastante simple encontrar todos los objetivos adicionales (que generalmente no son tantos).
El problema más grande son los objetivos implícitos (es decir, cuando un complemento se engancha a algunas fases del ciclo de vida automáticamente). No hay una manera fácil de ver estos sin ejecutar Maven. Esto debería mejorar en Maven 3. Hasta entonces, ejecute Maven con -X
que imprimirá una gran cantidad de salida de depuración más la fase actual y qué complementos se ejecutan.
mvn help:describe -Dcmd=compile
(o cualquier otra fase válida)