Maven Comando per elencare le fasi del ciclo di vita insieme con gli obiettivi legati?
Domanda
Sto scoprendo Maven, e quindi questo potrebbe essere ovvio, ma non riesco a trovare un modo semplice per elencare gli obiettivi associati per ogni fase del ciclo di vita Maven per un determinato progetto.
Ho visto che le fasi del ciclo di vita di default Maven e corrispondenti obiettivi predefiniti sono documentate qui . La mia comprensione finora è che ogni pom.xml può legare ulteriori obiettivi per ogni fase del ciclo di vita.
Quindi, c'è un comando mvn per determinare gli obiettivi che verranno eseguiti per ogni fase del ciclo di vita di un determinato progetto? In caso contrario, credo che non mi resta che guardare attraverso il pom.xml per ogni nuovo progetto Maven di conoscere questo?
Soluzione
mvn help:describe -Dcmd=compile
(o qualsiasi altra fase valido)
Altri suggerimenti
Il buildplan-maven-plugin
è un ottimo strumento per mostrare come gli obiettivi sono destinati a fasi.
Di seguito sono riportati esempi di comandi è possibile eseguire. I comandi potranno scaricare e installare il plugin, se non è già stato installato automaticamente.
Elenco reti di nell'ordine in cui verranno eseguiti
> 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
obiettivi del Gruppo per 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
obiettivi del Gruppo per il 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
Note
Per impostazione predefinita, la ricerca di obiettivi per le attività che avrebbe eseguito se l'utente ha invocato mvn deploy
. Fasi quali clean
non saranno inclusi. Per includere più fasi nella ricerca, utilizzare la proprietà buildplan.tasks
:
> mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list -Dbuildplan.tasks=clean,deploy
Uno strumento che aiuta è mvn help:effective-pom
Si stampa il POM con tutte le variabili e tutte le POM genitore espansi. Questo aiuta a capire che cosa vede Maven. Da questo, è piuttosto semplice da trovare tutti gli ulteriori obiettivi (che di solito non sono che molti).
Il problema più grande è obiettivi impliciti (cioè quando un plugin si agganci ad alcune fasi del ciclo automatico). Non v'è alcun modo semplice per vedere questi senza effettivamente in esecuzione Maven. Questo dovrebbe diventare meglio in Maven 3. Fino ad allora, eseguire Maven con -X
che stamperà un sacco di debug oltre la fase attuale e quali plugin vengono eseguiti.
Se non con Maven ma utilizzando M2E è possibile farlo utilizzando il blocco di codice che è possibile utilizzare in un 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);
}
Guardate pieno fonte .
Già implementata in:
http://marketplace.eclipse.org/content/phases-and-goals
Si avvale della capacità di M2E per calcolare l'associazione di obiettivi con fasi. Sto anche cercando di risolverlo a livello Maven.
ho messo la risposta di Chad in uno script (in modo da non dover ricordare il nome del plugin, che è davvero lunga). Metti nel tuo bin / cartella ~ / in modo da poter utilizzare ovunque.
#!/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;