mvn.plugin.zsh 15 KB

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