I'd like to use jenv
on my Cygwin setup at home. Oracle has
moved to a 6-month release pace, and so I find myself dealing with
multiple Java major verions. However, my tool of choice, jenv
,
does not play well with Cygwin.
(Note: There are two jenv
s out there. I am talking
about jenv.be, not jenv.io. Apologies that neither does
HTTPS well.)
As a workaround, I wrote a straight-forward shell function to provide the minimum I need: switch between versions in the current shell:
# Until jenv.be supports Cygwin function set-java { local -a java_v local jdk v OPTIND for jdk in /cygdrive/c/Program\ Files/Java/jdk* do jdk="${jdk/\/cygdrive\/c\/Program\ Files\/Java\/jdk/}" v=${jdk#-} v=${v#1.} v=${v%%.*} java_v[$v]=$jdk done local verbose=false while getopts :hv opt do case $opt in h ) cat <<EOH Usage: $FUNCNAME [-hv] VERSION Options: -h Print help and exit -v Verbose output Arguments: VERSION One of ${!java_v[@]} EOH return 0 ;; v ) verbose=true ;; * ) echo "Usage: $FUNCNAME [-hv] VERSION" >&2 ; return 2 ;; esac done shift $((OPTIND - 1)) case $# in 1 ) ;; * ) echo "Usage: $FUNCNAME [-hv] VERSION" >&2 ; return 2 ;; esac if ! [[ ${java_v[$1]+foo} ]] then echo "$FUNCNAME: No such Java version: $1. Try $FUNCNAME -h" >&2 return 2 fi export JAVA_HOME='C:\Program Files\Java\jdk'${java_v[$1]} for v in ${!java_v[@]} do case $v in $1 ) ;; * ) export PATH="${PATH//${java_v[$v]}/${java_v[$1]}}" ;; esac done if $verbose then echo "$FUNCNAME: Updated JAVA_HOME and PATH for JDK to $v at $JAVA_HOME" fi }
Try the -h
flag (help).