Last active
October 20, 2023 09:25
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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