6 echo "Usage: $CMD [-v N] /path/to/jarfile" >&2
7 echo " -v N build jar with alternative classes for version N of java (optional, defaults to base jar packages which is usually 8)" >&2
25 v) VERSION=${OPTARG};;
31 [ -z $JARFILE ] && usagexit
32 [ -f $JARFILE ] || error "No file $JARFILE"
33 [ -r $JARFILE ] || error "$JARFILE not readable"
36 SUFFIX=-SINGLE_RELEASE
37 FILENAME=$(basename $JARFILE)
38 BASE=$(basename -s $EXT $JARFILE)
39 DIR=$(dirname $JARFILE)
41 TMPDIR=/tmp/$USER-$CMD-$BASE-$$
43 [ x$FILENAME = x$BASE ] && error "Should be $EXT file"
45 mkdir -p $TMPDIR || error "Could not create tmp dir $TMPDIR"
47 jar -xvf $JARFILE > /dev/null
48 VDIR=$TMPDIR/META-INF/versions
50 [ -d $VDIR ] || error "$JARFILE doesn't look like a multi-release jar file"
52 if [ -z $VERSION ]; then
53 # no version set... nothing to copy
55 elif [ -d $VDIR/$VERSION ]; then
56 # this version has alternative classes for the version asked for, copy them into the base jar
57 tar -cf - -C $VDIR/$VERSION . | tar -xf - -C $TMPDIR
59 echo "No specific classes for version $VERSION" >&2
60 echo "Available alternative versions are" >&2
65 # remove the alternative versions
68 # alter the manifest. note sed on macos is a bit weird
69 if [ `uname -s` = "Darwin" ]; then
70 sed -E -i '' 's/^([Mm]ulti-[Rr]elease):).*/\1 false/' $TMPDIR/META-INF/MANIFEST.MF
72 sed -E -i 's/^([Mm]ulti-[Rr]elease):).*/\1 false/' $TMPDIR/META-INF/MANIFEST.MF
75 jar -cvf $DIR/${BASE}${SUFFIX}${EXT} -C $TMPDIR . > /dev/null