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