Parent directory

mvn.plugin.zsh

15165 bytes
  1# Calls mvnw if found in the current project, otherwise execute the original mvn
  2mvn-or-mvnw() {
  3  local dir="$PWD"
  4  while [[ ! -x "$dir/mvnw" && "$dir" != / ]]; do
  5    dir="${dir:h}"
  6  done
  7
  8  if [[ -x "$dir/mvnw" ]]; then
  9    echo "Running \`$dir/mvnw\`..." >&2
 10    "$dir/mvnw" "$@"
 11    return $?
 12  fi
 13
 14  command mvn "$@"
 15}
 16
 17# Wrapper function for Maven's mvn command. Based on https://gist.github.com/1027800
 18mvn-color() {
 19  local BOLD=$(echoti bold)
 20  local TEXT_RED=$(echoti setaf 1)
 21  local TEXT_GREEN=$(echoti setaf 2)
 22  local TEXT_YELLOW=$(echoti setaf 3)
 23  local TEXT_BLUE=$(echoti setaf 4)
 24  local TEXT_WHITE=$(echoti setaf 7)
 25  local RESET_FORMATTING=$(echoti sgr0)
 26
 27  (
 28    # Filter mvn output using sed. Before filtering set the locale to C, so invalid characters won't break some sed implementations
 29    unset LANG
 30    LC_CTYPE=C mvn "$@" | sed \
 31      -e "s/\(\[INFO\]\)\(.*\)/${TEXT_BLUE}${BOLD}\1${RESET_FORMATTING}\2/g" \
 32      -e "s/\(\[DEBUG\]\)\(.*\)/${TEXT_WHITE}${BOLD}\1${RESET_FORMATTING}\2/g" \
 33      -e "s/\(\[INFO\]\ BUILD SUCCESSFUL\)/${BOLD}${TEXT_GREEN}\1${RESET_FORMATTING}/g" \
 34      -e "s/\(\[WARNING\]\)\(.*\)/${BOLD}${TEXT_YELLOW}\1${RESET_FORMATTING}\2/g" \
 35      -e "s/\(\[ERROR\]\)\(.*\)/${BOLD}${TEXT_RED}\1${RESET_FORMATTING}\2/g" \
 36      -e "s/Tests run: \([^,]*\), Failures: \([^,]*\), Errors: \([^,]*\), Skipped: \([^,]*\)/${BOLD}${TEXT_GREEN}Tests run: \1${RESET_FORMATTING}, Failures: ${BOLD}${TEXT_RED}\2${RESET_FORMATTING}, Errors: ${BOLD}${TEXT_RED}\3${RESET_FORMATTING}, Skipped: ${BOLD}${TEXT_YELLOW}\4${RESET_FORMATTING}/g"
 37
 38    # Make sure formatting is reset
 39    echo -ne "${RESET_FORMATTING}"
 40  )
 41}
 42
 43# either use original mvn or the mvn wrapper
 44alias mvn="mvn-or-mvnw"
 45
 46# Run mvn against the pom found in a project's root directory (assumes a git repo)
 47alias 'mvn!'='mvn -f $(git rev-parse --show-toplevel 2>/dev/null || echo ".")/pom.xml'
 48
 49# aliases
 50alias mvnag='mvn archetype:generate'
 51alias mvnboot='mvn spring-boot:run'
 52alias mvnc='mvn clean'
 53alias mvncd='mvn clean deploy'
 54alias mvnce='mvn clean eclipse:clean eclipse:eclipse'
 55alias mvnci='mvn clean install'
 56alias mvncie='mvn clean install eclipse:eclipse'
 57alias mvncini='mvn clean initialize'
 58alias mvncist='mvn clean install -DskipTests'
 59alias mvncisto='mvn clean install -DskipTests --offline'
 60alias mvncom='mvn compile'
 61alias mvncp='mvn clean package'
 62alias mvnct='mvn clean test'
 63alias mvncv='mvn clean verify'
 64alias mvncvst='mvn clean verify -DskipTests'
 65alias mvnv='mvn verify'
 66alias mvnvst='mvn verify -DskipTests'
 67alias mvndp='mvn deploy'
 68alias mvndocs='mvn dependency:resolve -Dclassifier=javadoc'
 69alias mvndt='mvn dependency:tree'
 70alias mvne='mvn eclipse:eclipse'
 71alias mvnfmt='mvn fmt:format'
 72alias mvnjetty='mvn jetty:run'
 73alias mvnp='mvn package'
 74alias mvnqdev='mvn quarkus:dev'
 75alias mvns='mvn site'
 76alias mvnsrc='mvn dependency:sources'
 77alias mvnt='mvn test'
 78alias mvntc='mvn tomcat:run'
 79alias mvntc7='mvn tomcat7:run'
 80alias mvn-updates='mvn versions:display-dependency-updates'
 81
 82
 83function listMavenCompletions {
 84  local file new_file
 85  local -a profiles POM_FILES modules
 86
 87  # Root POM
 88  POM_FILES=(~/.m2/settings.xml)
 89
 90  # POM in the current directory
 91  if [[ -f pom.xml ]]; then
 92    local file=pom.xml
 93    POM_FILES+=("${file:A}")
 94  fi
 95
 96  # Look for POM files in parent directories
 97  while [[ -n "$file" ]] && grep -q "<parent>" "$file"; do
 98    # look for a new relativePath for parent pom.xml
 99    new_file=$(grep -e "<relativePath>.*</relativePath>" "$file" | sed -e 's/.*<relativePath>\(.*\)<\/relativePath>.*/\1/')
100
101    # if <parent> is present but not defined, assume ../pom.xml
102    if [[ -z "$new_file" ]]; then
103      new_file="../pom.xml"
104    fi
105
106    file="${file:h}/${new_file}"
107
108    # if the file points to a directory, assume it is a pom.xml in that directory
109    if [[ -d "$file" ]]; then
110      file="${file}/pom.xml"
111    fi
112
113    # if file doesn't exist break
114    if ! [[ -e "$file" ]]; then
115      break
116    fi
117
118    POM_FILES+=("${file:A}")
119  done
120
121  # Get profiles from found files
122  for file in $POM_FILES; do
123    [[ -e $file ]] || continue
124    profiles+=($(sed 's/<!--.*-->//' "$file" | sed '/<!--/,/-->/d' | grep -e "<profile>" -A 1 | grep -e "<id>.*</id>" | sed 's?.*<id>\(.*\)<\/id>.*?-P\1?'))
125  done
126
127  # List modules
128  modules=($(print -l **/pom.xml(-.N:h) | grep -v '/target/classes/META-INF/'))
129
130  reply=(
131    # common lifecycle
132    clean initialize process-resources compile process-test-resources test-compile test package verify install deploy site
133
134    # integration testing
135    pre-integration-test integration-test
136
137    # common plugins
138    deploy failsafe install site surefire checkstyle javadoc jxr pmd ant antrun archetype assembly dependency enforcer gpg help release repository source eclipse idea jetty cargo jboss tomcat tomcat6 tomcat7 exec versions war ear ejb android scm buildnumber nexus repository sonar license hibernate3 liquibase flyway gwt
139
140    # deploy
141    deploy:deploy-file
142    # failsafe
143    failsafe:integration-test failsafe:verify
144    # install
145    install:install-file install:help
146    # site
147    site:site site:deploy site:run site:stage site:stage-deploy site:attach-descriptor site:jar site:effective-site
148    # surefire
149    surefire:test
150
151    # checkstyle
152    checkstyle:checkstyle checkstyle:check checkstyle:checkstyle-aggregate
153    # javadoc
154    javadoc:javadoc javadoc:test-javadoc javadoc:javadoc-no-fork javadoc:test-javadoc-no-fork javadoc:aggregate javadoc:test-aggregate javadoc:jar javadoc:test-jar javadoc:aggregate-jar javadoc:test-aggregate-jar javadoc:fix javadoc:test-fix javadoc:resource-bundle javadoc:test-resource-bundle
155    # jxr
156    jxr:jxr jxr:aggregate jxr:test-jxr jxr:test-aggregate
157    # pmd
158    pmd:pmd pmd:cpd pmd:check pmd:cpd-check
159
160    # ant
161    ant:ant ant:clean
162    # antrun
163    antrun:run
164    # archetype
165    archetype:generate archetype:create-from-project archetype:crawl
166    # assembly
167    assembly:single assembly:assembly
168    # dependency
169    dependency:analyze dependency:analyze-dep-mgt dependency:analyze-only dependency:analyze-report dependency:analyze-duplicate dependency:build-classpath dependency:copy dependency:copy-dependencies dependency:display-ancestors dependency:get dependency:go-offline dependency:list dependency:list-repositories dependency:properties dependency:purge-local-repository dependency:resolve dependency:resolve-plugins dependency:sources dependency:tree dependency:unpack dependency:unpack-dependencies
170    # enforcer
171    enforcer:enforce enforcer:display-info
172    # gpg
173    gpg:sign gpg:sign-and-deploy-file
174    # help
175    help:active-profiles help:all-profiles help:describe help:effective-pom help:effective-settings help:evaluate help:expressions help:system
176    # release
177    release:clean release:prepare release:prepare-with-pom release:rollback release:perform release:stage release:branch release:update-versions
178    # jgitflow
179    jgitflow:feature-start jgitflow:feature-finish jgitflow:release-start jgitflow:release-finish jgitflow:hotfix-start jgitflow:hotfix-finish jgitflow:build-number
180    # repository
181    repository:bundle-create repository:bundle-pack
182    # source
183    source:aggregate source:jar source:jar-no-fork source:test-jar source:test-jar-no-fork
184
185    # eclipse
186    eclipse:clean eclipse:eclipse
187    # idea
188    idea:clean idea:idea
189
190    # jetty
191    jetty:run jetty:run-exploded
192    # cargo
193    cargo:start cargo:run cargo:stop cargo:deploy cargo:undeploy cargo:help
194    # jboss
195    jboss:start jboss:stop jboss:deploy jboss:undeploy jboss:redeploy
196    # tomcat
197    tomcat:start tomcat:stop tomcat:deploy tomcat:undeploy tomcat:redeploy
198    # tomcat6
199    tomcat6:run tomcat6:run-war tomcat6:run-war-only tomcat6:stop tomcat6:deploy tomcat6:undeploy
200    # tomcat7
201    tomcat7:run tomcat7:run-war tomcat7:run-war-only tomcat7:deploy
202    # tomee
203    tomee:run tomee:run-war tomee:run-war-only tomee:stop tomee:deploy tomee:undeploy
204    # spring-boot
205    spring-boot:run spring-boot:repackage
206    # quarkus
207    quarkus:dev quarkus:list-extensions quarkus:add-extension quarkus:add-extensions quarkus:remove-extension quarkus:remove-extensions quarkus:generate-config quarkus:help
208    # exec
209    exec:exec exec:java
210    # versions
211    versions:display-dependency-updates versions:display-plugin-updates versions:display-property-updates versions:update-parent versions:update-properties versions:update-child-modules versions:lock-snapshots versions:unlock-snapshots versions:resolve-ranges versions:set versions:use-releases versions:use-next-releases versions:use-latest-releases versions:use-next-snapshots versions:use-latest-snapshots versions:use-next-versions versions:use-latest-versions versions:commit versions:revert
212    # scm
213    scm:add scm:bootstrap scm:branch scm:changelog scm:check-local-modification scm:checkin scm:checkout scm:diff scm:edit scm:export scm:list scm:remove scm:status scm:tag scm:unedit scm:update scm:update-subprojects scm:validate
214    # buildnumber
215    buildnumber:create buildnumber:create-timestamp buildnumber:help buildnumber:hgchangeset
216
217    # war
218    war:war war:exploded war:inplace war:manifest
219    # ear
220    ear:ear ear:generate-application-xml
221    # ejb
222    ejb:ejb
223    # android
224    android:apk android:apklib android:deploy android:deploy-dependencies android:dex android:emulator-start android:emulator-stop android:emulator-stop-all android:generate-sources android:help android:instrument android:manifest-update android:pull android:push android:redeploy android:run android:undeploy android:unpack android:version-update android:zipalign android:devices
225    # nexus
226    nexus:staging-list nexus:staging-close nexus:staging-drop nexus:staging-release nexus:staging-build-promotion nexus:staging-profiles-list nexus:settings-download
227    # repository
228    repository:bundle-create repository:bundle-pack repository:help
229
230    # sonar
231    sonar:sonar
232    # license
233    license:format license:check
234    # hibernate3
235    hibernate3:hbm2ddl hibernate3:help
236    # liquibase
237    liquibase:changelogSync liquibase:changelogSyncSQL liquibase:clearCheckSums liquibase:dbDoc liquibase:diff liquibase:dropAll liquibase:help liquibase:migrate liquibase:listLocks liquibase:migrateSQL liquibase:releaseLocks liquibase:rollback liquibase:rollbackSQL liquibase:status liquibase:tag liquibase:update liquibase:updateSQL liquibase:updateTestingRollback
238    # flyway
239    flyway:clean flyway:history flyway:init flyway:migrate flyway:status flyway:validate
240    # gwt
241    gwt:browser gwt:clean gwt:compile gwt:compile-report gwt:css gwt:debug gwt:eclipse gwt:eclipseTest gwt:generateAsync gwt:help gwt:i18n gwt:mergewebxml gwt:resources gwt:run gwt:sdkInstall gwt:source-jar gwt:soyc gwt:test
242    # asciidoctor
243    asciidoctor:process-asciidoc asciidoctor:auto-refresh asciidoctor:http asciidoctor:zip
244    # compiler
245    compiler:compile compiler:testCompile
246    # resources
247    resources:resources resources:testResources resources:copy-resources
248    # verifier
249    verifier:verify
250    # jar
251    jar:jar jar:test-jar
252    # rar
253    rar:rar
254    # acr
255    acr:acr
256    # shade
257    shade:shade
258    # changelog
259    changelog:changelog changelog:dev-activity changelog:file-activity
260    # changes
261    changes:announcement-mail changes:announcement-generate changes:changes-check changes:changes-validate changes:changes-report changes:jira-report changes:trac-report changes:github-report
262    # doap
263    doap:generate
264    # docck
265    docck:check
266    # jdeps
267    jdeps:jdkinternals jdeps:test-jdkinternals
268    # linkcheck
269    linkcheck:linkcheck
270    # project-info-reports
271    project-info-reports:cim project-info-reports:dependencies project-info-reports:dependency-convergence project-info-reports:dependency-info project-info-reports:dependency-management project-info-reports:distribution-management project-info-reports:help project-info-reports:index project-info-reports:issue-tracking project-info-reports:license project-info-reports:mailing-list project-info-reports:modules project-info-reports:plugin-management project-info-reports:plugins project-info-reports:project-team project-info-reports:scm project-info-reports:summary
272    # surefire-report
273    surefire-report:failsafe-report-only surefire-report:report surefire-report:report-only
274    # invoker
275    invoker:install invoker:integration-test invoker:verify invoker:run
276    # jarsigner
277    jarsigner:sign jarsigner:verify
278    # patch
279    patch:apply
280    # pdf
281    pdf:pdf
282    # plugin
283    plugin:descriptor plugin:report plugin:updateRegistry plugin:addPluginArtifactMetadata plugin:helpmojo
284    # remote-resources
285    remote-resources:bundle remote-resources:process
286    # scm-publish
287    scm-publish:help scm-publish:publish-scm scm-publish:scmpublish
288    # stage
289    stage:copy
290    # toolchain
291    toolchain:toolchain
292    #liberty
293    liberty:clean-server liberty:compile-jsp liberty:configure-arquillian liberty:create-server liberty:debug liberty:debug-server liberty:deploy liberty:dev liberty:display-url liberty:dump-server liberty:install-apps liberty:install-feature liberty:install-server liberty:java-dump-server liberty:package-server liberty:run liberty:run-server liberty:server-status liberty:start liberty:start-server liberty:status liberty:stop liberty:stop-server liberty:test-start-server liberty:test-stop-server liberty:undeploy liberty:uninstall-feature
294    # vaadin
295    vaadin:prepare-frontend vaadin:build-frontend vaadin:clean-frontend vaadin:dance
296
297    # options
298    "-Dmaven.test.skip=true" -DskipTests -DskipITs -Dmaven.surefire.debug -DenableCiProfile "-Dpmd.skip=true" "-Dcheckstyle.skip=true" "-Dtycho.mode=maven" "-Dmaven.test.failure.ignore=true" "-DgroupId=" "-DartifactId=" "-Dversion=" "-Dpackaging=jar" "-Dfile=" "-Dextensions="
299
300    # arguments
301    -am --also-make
302    -amd --also-make-dependents-am
303    -B --batch-mode
304    -b --builder
305    -C --strict-checksums
306    -c --lax-checksums
307    -cpu --check-plugin-updates
308    -D --define
309    -e --errors
310    -emp --encrypt-master-password
311    -ep --encrypt-password
312    -f --file
313    -fae --fail-at-end
314    -ff --fail-fast
315    -fn --fail-never
316    -gs --global-settings
317    -gt --global-toolchains
318    -h --help
319    -l --log-file
320    -llr --legacy-local-repository
321    -N --non-recursive
322    -npr --no-plugin-registry
323    -npu --no-plugin-updates
324    -nsu --no-snapshot-updates
325    -o --offline
326    -P --activate-profiles
327    -pl --projects
328    -q --quiet
329    -rf --resume-from
330    -s --settings
331    -t --toolchains
332    -T --threads
333    -U --update-snapshots
334    -up --update-plugins
335    -v --version
336    -V --show-version
337    -X --debug
338
339    cli:execute cli:execute-phase
340    archetype:generate generate-sources
341    cobertura:cobertura
342    -Dtest=$(if [ -d ./src/test/java ] ; then find ./src/test/java -type f -name '*.java' | grep -v svn | sed 's?.*/\([^/]*\)\..*?-Dtest=\1?' ; fi)
343    -Dit.test=$(if [ -d ./src/test/java ] ; then find ./src/test/java -type f -name '*.java' | grep -v svn | sed 's?.*/\([^/]*\)\..*?-Dit.test=\1?' ; fi)
344
345    $profiles
346    $modules
347  )
348}
349
350compctl -K listMavenCompletions mvn mvnw
351compctl -K listMavenCompletions mvn-color
352compctl -K listMavenCompletions mvn-or-mvnw