Maven Befehl Phasen des Lebenszyklus zusammen mit gebundenen Zielen zur Liste?
Frage
Ich lerne gerade Maven, und so könnte dies offensichtlich sein, aber ich kann nicht eine einfache Möglichkeit finden, die Ziele für jeden Maven Lifecycle-Phase für ein bestimmtes Projekt zugeordnet aufzulisten.
sah ich, dass die Maven Standardlebenszyklusphasen und entsprechende Standard Ziele dokumentiert hier . Mein Verständnis ist so weit, dass jeder pom.xml zusätzliche Ziele zu jeder Phase des Lebenszyklus binden kann.
So gibt es einen mvn Befehl, um die Ziele zu bestimmen, die für jede Phase des Lebenszyklus für ein bestimmtes Projekt ausgeführt werden? Wenn nicht, ich denke, ich muss nur die pom.xml schauen durch für jedes neue Maven-Projekt, das herauszufinden?
Lösung
mvn help:describe -Dcmd=compile
(oder eine andere gültige Phase)
Andere Tipps
Die buildplan-maven-plugin
ist ein ausgezeichnetes Werkzeug für die zeigen, wie Ziele zu Phasen gebunden.
Im Folgenden sind Beispiele für Befehle, die Sie ausführen können. Die Befehle werden automatisch heruntergeladen und installiert das Plugin automatisch, wenn es nicht bereits installiert ist.
Liste Ziele durch die Reihenfolge werden sie ausführen
> 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
Konzernziele durch Phase
> 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
Gruppenziele durch 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
Notizen
Standardmäßig suchen die Ziele für Aufgaben, die ausgeführt werden, wenn die Benutzer mvn deploy
aufgerufen. Phasen wie clean
werden nicht berücksichtigt. Um mehrere Phasen in die Suche einzubeziehen, verwenden Sie die buildplan.tasks
Eigenschaft:
> mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list -Dbuildplan.tasks=clean,deploy
Ein Werkzeug, das hilft, ist mvn help:effective-pom
Es wird das POM mit allen Variablen und alle übergeordneten POMs erweitert drucken. Dies hilft zu verstehen, was Maven sieht. Von diesem, ist es ziemlich einfach, alle zusätzlichen Ziele zu finden (die in der Regel nicht so viele sind).
Das größere Problem ist die impliziten Ziele (das heißt, wenn ein Plugin Haken sich auf einige Phasen des Lebenszyklus automatisch). Es gibt keine einfache Möglichkeit, diese ohne tatsächlich ausgeführt wird Maven zu sehen. Dies sollte sich besser in Maven 3. Bis dahin laufen Maven mit -X
, die eine ganze Reihe von Debug-Ausgabe sowie die aktuelle Phase und ausgeführt werden, welche Plugins gedruckt werden.
Wenn nicht mit Maven aber M2e verwenden Sie können es tun, den Codeblock verwenden, die Sie in einer Eclipse-Plugin verwenden können:
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);
}
Schauen Sie sich voll Quelle .
Bereits umgesetzt in:
http://marketplace.eclipse.org/content/phases-and-goals
Es nutzt M2e Fähigkeit, die Vereinigung von Zielen mit Phasen zu berechnen. Ich versuche es auch bei Maven Ebene zu lösen.
habe ich Chad Antwort in ein Skript (also muss ich nicht den Namen des Plugins erinnern, die wirklich lang ist). Legen Sie es in Ihrem ~ / bin / Ordner, so können Sie es überall verwenden können.
#!/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;