Skip to content

Instantly share code, notes, and snippets.

@skjolber
Last active October 20, 2023 09:25
Show Gist options
  • Save skjolber/1066518158616ee93964670d18c739bd to your computer and use it in GitHub Desktop.
Save skjolber/1066518158616ee93964670d18c739bd to your computer and use it in GitHub Desktop.
Autodetect JAVA_HOME for Maven builds - LTS releases. Also with some Gradle aliases (without autodetect) and performance-testing commands.
# Autodetect JAVA_HOME for Maven builds
# Linux / Fedora
# Prefer symbolic links if available
# JAVA 8 LTS
JDK8S=$(find /usr/lib/jvm -maxdepth 1 -type l -path "*/java-1.8.0-openjdk*" -print | sort -r)
if [ -z "$JDK8S" ]; then
echo "$JDK8S"
JDK8S=$(find /usr/lib/jvm -maxdepth 1 -type d -path "*/java-1.8.0-openjdk*" -print | sort -r)
fi
JDK8=`echo "${JDK8S}" | head -1`
# JAVA 11 LTS
JDK11S=$(find /usr/lib/jvm -maxdepth 1 -type l -path "*/java-11-openjdk*" -print | sort -r)
if [ -z "$JDK11S" ]; then
JDK11S=$(find /usr/lib/jvm -maxdepth 1 -type d -path "*/java-11-openjdk*" -print | sort -r)
fi
JDK11=`echo "${JDK11S}" | head -1`
# JAVA 17 LTS
JDK17S=$(find /usr/lib/jvm -maxdepth 1 -type l -path "*/java-17-*" -print | sort -r)
if [ -z "$JDK17S" ]; then
JDK17S=$(find /usr/lib/jvm -maxdepth 1 -type d -path "*/java-17-*" -print | sort -r)
fi
JDK17=`echo "${JDK17S}" | head -1`
# JAVA 21 LTS
JDK21S=$(find /usr/lib/jvm -maxdepth 1 -type l -path "*/java-21-*" -print | sort -r)
if [ -z "$JDK21S" ]; then
JDK21S=$(find /usr/lib/jvm -maxdepth 1 -type d -path "*/java-21-*" -print | sort -r)
fi
JDK21=`echo "${JDK21S}" | head -1`
# GraalVM JAVA 17 LTS
GRAALVM_JDK17S=$(find /usr/lib/jvm -maxdepth 1 -type l -path "*/graalvm-jdk-17*" -print | sort -r)
if [ -z "$GRAALVM_JDK17S" ]; then
GRAALVM_JDK17S=$(find /usr/lib/jvm -maxdepth 1 -type d -path "*/graalvm-jdk-17*" -print | sort -r)
fi
GRAALVM_JDK17=`echo "${GRAALVM_JDK17S}" | head -1`
# JAVA 21 LTS
GRAALVM_JDK21S=$(find /usr/lib/jvm -maxdepth 1 -type l -path "*/graalvm-jdk-21*" -print | sort -r)
if [ -z "$GRAALVM_JDK21S" ]; then
GRAALVM_JDK21S=$(find /usr/lib/jvm -maxdepth 1 -type d -path "*/graalvm-jdk-21*" -print | sort -r)
fi
GRAALVM_JDK21=`echo "${GRAALVM_JDK21S}" | head -1`
#echo "$JDK8"
#echo "$JDK11"
#echo "$JDK17"
#echo "$JDK21"
#echo "$GRAALVM_JDK17"
#echo "$GRAALVM_JDK21"
getPomProperty() {
local version=$(getPomXPath "/*/*[local-name()='properties']/*[local-name()='$1']/text()" "$2")
version=$(resolvePomProperty "$version" "$2")
echo "$version"
}
resolvePomProperty() {
local version="$1"
if [[ "$version" =~ ^\$\{.*\} ]] ; then
# https://stackoverflow.com/questions/428109/extract-substring-in-bash
[[ ${version} =~ ^\$\{(.*)\} ]] && propertyValue=${BASH_REMATCH[1]}
version=$(getPomProperty "$propertyValue" "$2")
fi
echo "$version"
}
getPomXPath() {
local version=$(xmllint --xpath "$1" $2 2>/dev/null)
version=$(resolvePomProperty "$version" "$2")
echo "$version"
}
detectJavaVersionForMaven()
{
# first check the new way of defining release in maven compiler plugin
VERSION=$(getPomXPath "//*[local-name()='artifactId' and text()='maven-compiler-plugin']/..//*[local-name()='configuration']/*[local-name()='release']/text()" "$1")
if [ -z "$VERSION" ]; then
VERSION=$(getPomProperty "maven.compiler.release" "$1")
fi
# check the old way of defining release in maven compiler plugin
if [ -z "$VERSION" ]; then
VERSION=$(getPomXPath "//*[local-name()='artifactId' and text()='maven-compiler-plugin']/..//*[local-name()='configuration']/*[local-name()='target']/text()" "$1")
fi
# https://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html
if [ -z "$VERSION" ]; then
VERSION=$(getPomProperty "maven.compiler.target" "$1")
fi
# check for Spring-related property
if [ -z "$VERSION" ]; then
VERSION=$(getPomProperty "java.version" "$1")
fi
echo "$VERSION"
}
runAutomaticJavaForMaven() {
local VERSION=$1
local SOURCE=$2
shift 2 # remove 2 arguments
if [ "$VERSION" = '1.8' ] || [ "$VERSION" = '8' ]; then
echo "Running Maven with Java 8.."
JAVA_HOME="$JDK8" mvn "$@"
elif [ "$VERSION" = '9' ]; then
echo "Running Maven project at source level 9 with Java 11.."
JAVA_HOME="$JDK11" mvn "$@"
elif [ "$VERSION" = '10' ]; then
echo "Running Maven project at source level 10 with Java 11.."
JAVA_HOME="$JDK11" mvn "$@"
elif [ "$VERSION" = '11' ]; then
echo "Running Maven with Java 11.."
JAVA_HOME="$JDK11" mvn "$@"
elif [ "$VERSION" = '12' ]; then
echo "Running Maven project at source level 12 with Java 17.."
JAVA_HOME="$JDK17" mvn "$@"
elif [ "$VERSION" = '13' ]; then
echo "Running Maven project at source level 13 with Java 17.."
JAVA_HOME="$JDK17" mvn "$@"
elif [ "$VERSION" = '14' ]; then
echo "Running Maven project at source level 14 with Java 17.."
JAVA_HOME="$JDK17" mvn "$@"
elif [ "$VERSION" = '15' ]; then
echo "Running Maven project at source level 15 with Java 17.."
JAVA_HOME="$JDK17" mvn "$@"
elif [ "$VERSION" = '16' ]; then
echo "Running Maven project at source level 16 with Java 17.."
JAVA_HOME="$JDK17" mvn "$@"
elif [ "$VERSION" = '17' ]; then
echo "Running Maven with Java 17.."
JAVA_HOME="$JDK17" mvn "$@"
elif [ "$VERSION" = '18' ]; then
echo "Running Maven with Java 21.."
JAVA_HOME="$JDK21" mvn "$@"
elif [ "$VERSION" = '19' ]; then
echo "Running Maven with Java 21.."
JAVA_HOME="$JDK21" mvn "$@"
elif [ "$VERSION" = '20' ]; then
echo "Running Maven with Java 21.."
JAVA_HOME="$JDK21" mvn "$@"
elif [ "$VERSION" = '21' ]; then
echo "Running Maven with Java 21.."
JAVA_HOME="$JDK21" mvn "$@"
else
echo "Unable parse Java version $VERSION from $SOURCE, running with default."
mvn "$@"
fi
}
searchAutomaticJavaForMaven () {
local path=$(pwd)
while true; do
local VERSION=""
if [ -f "$path/pom.xml" ]; then
# check the pom for a versionkill
VERSION=$(detectJavaVersionForMaven "$path/pom.xml")
fi
if [ -n "$VERSION" ]; then
runAutomaticJavaForMaven "$VERSION" "$path/pom.xml" "$@"
break
fi
local nextPath=${path%/*}
if [[ -d "$path/.git" ]] || [[ "$nextPath" == "" ]]; then
echo "Unable to autodetect Java version in pom, running with default."
mvn "$@"
break
fi
path="$nextPath"
done
}
##############################################
# java aliases
##############################################
if [ ! -z "$JDK8" ]; then
alias java8="JAVA_HOME=$JDK8 $JDK8/bin/java"
else
alias java8="echo No Java 8 JRE detected. Run 'source ~/.bashrc' if installed."
fi
if [ ! -z "$JDK11" ]; then
alias java11="JAVA_HOME=$JDK11 $JDK11/bin/java"
else
alias java11="echo No Java 11 JRE detected. Run 'source ~/.bashrc' if installed."
fi
if [ ! -z "$JDK17" ]; then
alias java17="JAVA_HOME=$JDK17 $JDK17/bin/java"
else
alias java17="echo No Java 17 JRE detected. Run 'source ~/.bashrc' if installed."
fi
if [ ! -z "$JDK21" ]; then
alias java21="JAVA_HOME=$JDK21 $JDK21/bin/java"
else
alias java21="echo No Java 21 JRE detected. Run 'source ~/.bashrc' if installed."
fi
if [ ! -z "$GRAALVM_JDK17" ]; then
alias javag17="JAVA_HOME=$GRAALVM_JDK17 $GRAALVM_JDK17/bin/java"
else
alias javag17="echo No GraalVM JDK 17 JRE detected. Run 'source ~/.bashrc' if installed."
fi
if [ ! -z "$GRAALVM_JDK21" ]; then
alias javag21="JAVA_HOME=$GRAALVM_JDK21 $GRAALVM_JDK21/bin/java"
else
alias javag21="echo No GraalVM JDK 21 JRE detected. Run 'source ~/.bashrc' if installed."
fi
##############################################
# maven aliases
##############################################
alias m=searchAutomaticJavaForMaven
alias mm="m clean install"
if [ ! -z "$JDK8" ]; then
alias m8="JAVA_HOME=$JDK8 mvn"
alias mm8="m8 clean install"
else
alias m8="echo No Java 8 JRE detected. Run 'source ~/.bashrc' if installed."
alias mm8="m8"
fi
if [ ! -z "$JDK11" ]; then
alias m11="JAVA_HOME=$JDK11 mvn"
alias mm11="m11 clean install"
else
alias m11="echo No Java 11 JRE detected. Run 'source ~/.bashrc' if installed."
alias mm11="m11"
fi
if [ ! -z "$JDK17" ]; then
alias m17="JAVA_HOME=$JDK17 mvn"
alias mm17="m17 clean install"
else
alias m17="echo No Java 17 JRE detected. Run 'source ~/.bashrc' if installed."
alias mm17="m17"
fi
if [ ! -z "$JDK21" ]; then
alias m21="JAVA_HOME=$JDK21 mvn"
alias mm21="m21 clean install"
else
alias m21="echo No Java 21 JRE detected. Run 'source ~/.bashrc' if installed."
alias mm21="m21"
fi
if [ ! -z "$GRAALVM_JDK17" ]; then
alias mg17="JAVA_HOME=$GRAALVM_JDK17 mvn"
alias mmg17="mg17 clean install"
else
alias mg17="echo No GraalVM JDK 17 JRE detected. Run 'source ~/.bashrc' if installed."
alias mmg17="mg17"
fi
if [ ! -z "$GRAALVM_JDK21" ]; then
alias mg21="JAVA_HOME=$GRAALVM_JDK21 mvn"
alias mmg21="mg21 clean install"
else
alias mg21="echo No GraalVM JDK 21 JRE detected. Run 'source ~/.bashrc' if installed."
alias mmg21="m21"
fi
##############################################
# gradle aliases
##############################################
defaultArgument="--stacktrace"
alias w="./gradlew $defaultArgument"
alias ww="./gradlew build $defaultArgument"
alias wwi="./gradlew build --info $defaultArgument"
if [ ! -z "$JDK8" ]; then
alias w8="JAVA_HOME=$JDK8 ./gradlew $defaultArgument"
alias w8i="JAVA_HOME=$JDK8 ./gradlew --info $defaultArgument"
alias ww8="JAVA_HOME=$JDK8 ./gradlew build $defaultArgument"
alias ww8i="JAVA_HOME=$JDK8 ./gradlew build --info $defaultArgument"
else
alias w8="echo No Java 11 JRE detected. Run 'source ~/.bashrc' if installed."
alias w8i="w11"
alias ww8="w11"
alias ww8i="w11"
fi
if [ ! -z "$JDK11" ]; then
alias w11="JAVA_HOME=$JDK11 ./gradlew $defaultArgument"
alias w11i="JAVA_HOME=$JDK11 ./gradlew --info $defaultArgument"
alias ww11="JAVA_HOME=$JDK11 ./gradlew build $defaultArgument"
alias ww11i="JAVA_HOME=$JDK11 ./gradlew build --info $defaultArgument"
else
alias w11="echo No Java 11 JRE detected. Run 'source ~/.bashrc' if installed."
alias w11i="w11"
alias ww11="w11"
alias ww11i="w11"
fi
if [ ! -z "$JDK17" ]; then
alias w17="JAVA_HOME=$JDK17 ./gradlew $defaultArgument"
alias w17i="JAVA_HOME=$JDK17 ./gradlew --info $defaultArgument"
alias ww17="JAVA_HOME=$JDK17 ./gradlew build $defaultArgument"
alias ww17i="JAVA_HOME=$JDK17 ./gradlew build --info $defaultArgument"
else
alias w17="echo No Java 17 JRE detected. Run 'source ~/.bashrc' if installed."
alias w17i="w17"
alias ww17="w17"
alias ww17i="w17"
fi
if [ ! -z "$JDK21" ]; then
alias w21="JAVA_HOME=$JDK21 ./gradlew $defaultArgument"
alias w21i="JAVA_HOME=$JDK21 ./gradlew --info $defaultArgument"
alias ww21="JAVA_HOME=$JDK21 ./gradlew build $defaultArgument"
alias ww21i="JAVA_HOME=$JDK21 ./gradlew build --info $defaultArgument"
else
alias w21="echo No Java 21 JRE detected. Run 'source ~/.bashrc' if installed."
alias w21i="w21"
alias ww21="w21"
alias ww21i="w21"
fi
if [ ! -z "$GRAALVM_JDK17" ]; then
alias wg17="JAVA_HOME=$GRAALVM_JDK17 ./gradlew $defaultArgument"
alias wg17i="JAVA_HOME=$GRAALVM_JDK17 ./gradlew --info $defaultArgument"
alias wwg17="JAVA_HOME=$GRAALVM_JDK17 ./gradlew build $defaultArgument"
alias wwg17i="JAVA_HOME=$GRAALVM_JDK17 ./gradlew build --info $defaultArgument"
else
alias wg17="echo No GraalVM Java 17 JDK detected. Run 'source ~/.bashrc' if installed."
alias wg17i="wg17"
alias wwg17="wg17"
alias wwg17i="wg17"
fi
if [ ! -z "$GRAALVM_JDK21" ]; then
alias wg21="JAVA_HOME=$GRAALVM_JDK21 ./gradlew $defaultArgument"
alias wg21i="JAVA_HOME=$GRAALVM_JDK21 ./gradlew --info $defaultArgument"
alias wwg21="JAVA_HOME=$GRAALVM_JDK21 ./gradlew build $defaultArgument"
alias wwg21i="JAVA_HOME=$GRAALVM_JDK21 ./gradlew build --info $defaultArgument"
else
alias wg21="echo No GraalVM Java 21 JDK detected. Run 'source ~/.bashrc' if installed."
alias wg21i="wg21"
alias wwg21="wg21"
alias wwg21i="wg21"
fi
##############################################
# performance testing
##############################################
killProcessByPort () {
pid=$(lsof -i:$1 -t); kill -TERM $pid || kill -KILL $pid
}
alias killport=killProcessByPort
killProcessByName () {
pids=$(pgrep $1)
pid=$(lsof -i:$1 -t); kill -TERM $pid || kill -KILL $pid
}
alias killname=killProcessByName
enableOrDisableBoostForAmd () {
if [ "$1" = "on" ]; then
echo "1" | sudo tee /sys/devices/system/cpu/cpufreq/boost
elif [ "$1" = "off" ]; then
echo "0" | sudo tee /sys/devices/system/cpu/cpufreq/boost
else
echo "Unknown option $1"
fi
}
alias boost=enableOrDisableBoostForAmd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment