Auf der Apache Maven Seite findet sich eine kurze Anleitung wie man unter der Bash eine Tab Auto Completion für Apache Maven 2 einrichten kann. Eine Anleitung für die Einrichtung der Completion für Linux, Windows und Mac läßt sich hier finden.
Allerdings werden in den Beschreibungen nur fixe Werte für die Tab Completion angegeben, man muss also alle Plugins genau kennen, die man über die Tab Auto Completion zur Verfügung stellen will. Ich habe das ganze etwas erweitert, so dass alle im Maven Repository verfügbaren Plugins (unterhalb von org/apache/maven/plugins) verwendet werden können. Momentan sieht eine Ausgabe auf meinem System so aus:
kkoehler@halo:~$ mvn [tab] [tab] antrun:run plugin:helpmojo checkstyle:check plugin:report checkstyle:checkstyle plugin:updateRegistry checkstyle:help plugin:xdoc clean project-info-reports:cim clean:clean project-info-reports:dependencies compile project-info-reports:dependency-convergence compiler:compile project-info-reports:dependency-management compiler:testCompile project-info-reports:help deploy project-info-reports:index eclipse:add-maven-repo project-info-reports:issue-tracking eclipse:clean project-info-reports:license eclipse:configure-workspace project-info-reports:mailing-list eclipse:eclipse project-info-reports:plugin-management eclipse:install-plugins project-info-reports:plugins eclipse:m2eclipse project-info-reports:project-team eclipse:make-artifacts project-info-reports:scm eclipse:myeclipse project-info-reports:summary eclipse:myeclipse-clean release:branch eclipse:rad release:clean eclipse:rad-clean release:perform eclipse:to-maven release:prepare help:active-profiles release:rollback help:all-profiles resources:copy-resources help:describe resources:help help:effective-pom resources:resources help:effective-settings resources:testResources help:evaluate site help:expressions site:attach-descriptor help:help site:deploy help:system site:jar install site:run install:install site:site install:install-file site:stage jar:jar site:stage-deploy jar:sign source:aggregate jar:sign-verify source:jar jar:test-jar source:test-jar package surefire:test plugin:addPluginArtifactMetadata test plugin:descriptor
Entsprechend ist die Ausgabe bei "halben" Kommandos:
kkoehler@halo:~$ mvn help [tab] [tab] help:active-profiles help:evaluate help:all-profiles help:expressions help:describe help:help help:effective-pom help:system help:effective-settings
Die Anpassungen hierzu waren minimal. Ich musste "nur" ein kleines Progrämmchen schreiben, das alle Plugin Metainformationen ausliest und von dort die entsprechenden Goals als Liste ausgibt. Da das Suchen und Parsen der Plugins eventuell recht lange dauern kann, wird in der Anwendung die Liste gechacht und nur einmal am Tag neu generiert. Somit läuft das ganze wirklich flott!
Programmiert ist alles in Java und zur Startzeitoptimierung mit gcj noch nativ übersetzt. Ob das wirklich was bringt weiß ich allerdings nicht, ich habs nicht gemessen ;-).
Mein Skript unter '/etc/bash_completion.d' sieht jetzt so aus:
#!/bin/bash
_m2_make_goals()
{
plugin=$1
mojos=$2
for mojo in $mojos
do
export goals="$goals $plugin:$mojo"
done
}
_m2_complete()
{
local cur goals
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
goals='clean compile test install package deploy site help:effective-pom '
goals+=`/usr/bin/mavenBashComplete -list`
cur=`echo $cur | sed 's/\\\\//g'`
COMPREPLY=($(compgen -W "${goals}" ${cur} | sed 's/\\\\//g') )
}
complete -F _m2_complete -o filenames mvn
Wer die Anwendung selbst benutzen möchte findet hier das Jar File mit der Anwendung . Über folgenden Befehl läßt sich die Anwendung starten:
java -jar maven-bash-completion.jar
In der vorliegenden Version wird im Home Verzeichnis des aktuellen Benutzers unter '.m2/repository/org/apache/maven/plugins/' nach den Plugins gesucht. Die Cache Datei wird als '.m2_bash_complete_cache' im Home Verzeichnis abgelegt. Wer Änderungen am Quellcode machen möchte kann sich gerne an mich wenden !
Ich habe auch noch eine zweites Skript in Bearbeitung, das sämtliche Plugins des aktuellen Projektes mit aufnimmt. Ist aber noch in Arbeit...