I frequently use Maven's deploy:deploy-file
mojo for building project-local repositories.
Many interesting 3rd-party Java libraries are not (yet) available from public Maven repositories (the otherwise excellent dev.java.net
projects are particularly weak in this respect), but I want to use them in my project POM. What to do?
I store them with my project. This is not an ideal solution, but it is practical.
To help me deploying jars, sources and javadocs I wrote a simple BASH wrapper script for Cygwin (to run under Linux/UNIX requires a trivial change). Here is typical use:
$ mvn-file-deploy ~/IdeaProjects/Scratch/lib cool-library-1.0.4.jar org.cool.library:cool-library:1.0.4 $ mvn-file-deploy -S ~/IdeaProjects/Scratch/lib cool-library-1.0.4-sources.jar org.cool.library:cool-library:1.0.4 $ mvn-file-deploy -J ~/IdeaProjects/Scratch/lib cool-library-1.0.4-javadocs.jar org.cool.library:cool-library:1.0.4
And the script itself:
#!/bin/bash function help() { cat <<'EOH' | fmt Usage: mvn-file-deploy [options] REPO_PATH FILE_PATH DESCRIPTOR [CLASSIFIER] Use mvn-file-deploy as a helper for 'mvn deploy:deploy-file' when using Cygwin. EOH cat <<'EOH' Options: -h, --help Print this help message --version Print program version -S, --sources Deploy sources -J, --javadocs Deploy javadocs -q, --quiet Do not print maven command EOH cat <<'EOH' | fmt Other options are passed to Maven. (BROKEN) Examples: The most common use is to run it like this: $ mvn-file-deploy C:/my/project/lib C:/some/interesting.jar groupId:artifactId:version Or if you use a classifier (e.g., jdk5): But sometimes like this. $ mvn-file-deploy C:/my/project/lib C:/some/interesting.jar groupId:artifactId:version classifier Report bugs to <binkley@alumni.rice.edu>. EOH } function version() { cat <<'EOV' | fmt mvn-file-deploy 1.0 Copyright (C) 2007 JPMorganChase, Inc. All rights reserved. EOV } function fatal() { echo "$0: $*" >&2 exit 2 } function usage() { cat <<'EOU' | fmt >&2 usage: mvn-file-deploy [options] REPO_PATH FILE_PATH DESCRIPTOR [CLASSIFIER] EOU } eval set -- "$(getopt -o hJSq --long help,javadocs,sources,quiet,version -n "$0" -- "$@")" declare -a maven_opts declare -a args for opt do shift case "$opt" in -h|--help ) help ; exit 0 ;; -J|--javadocs ) classifier=-Dclassifier=javadocs ;; -S|--sources ) classifier=-Dclassifier=sources ;; --version ) version ; exit 0 ;; -q|--quiet ) quiet=t ; maven_opts=("${maven_opts[@]}" "$opt") ;; -- ) break ;; -* ) maven_opts=("${maven_opts[@]}" "$opt") ;; esac done case $# in 3 ) repo_path="$1" file_path="$2" descriptor="$3" ;; 4 ) repo_path="$1" file_path="$2" descriptor="$3" classifier=-Dclassifier="$4" ;; * ) usage ; exit 2 ;; esac (cd "$repo_path" 2>/dev/null) || \ fatal "No such repository path: $repo_path" repo_url="file://$(cygpath -am "$repo_path")" file_path="$(cygpath -am "$file_path")" [[ -r "$file_path" ]] || \ fatal "No such artifact: $file_path" triplet=($(echo $descriptor | tr : ' ')) (( 3 == ${#triplet[*]} )) || \ fatal "Descriptor not groupId:artifactId:version format: $descriptor" packaging=-Dpackaging="${file_path##*.}" [[ -n "$quiet" ]] || echo mvn "${maven_opts[@]}" deploy:deploy-file -Durl="$repo_url" \ -DrepositoryId=project -Dfile="$file_path" -DgroupId=${triplet[0]} \ -DartifactId=${triplet[1]} -Dversion=${triplet[2]} \ $packaging $classifier exec mvn "${maven_opts[@]}" deploy:deploy-file -Durl="$repo_url" \ -DrepositoryId=project -Dfile="$file_path" -DgroupId=${triplet[0]} \ -DartifactId=${triplet[1]} -Dversion=${triplet[2]} \ $packaging $classifier
No comments:
Post a Comment