This is my solution using mirroring and preloading the plugins -
#!/bin/bash
set -e
echo "[INFO] Installing Maven..."
apt update && apt install -y maven curl unzip
echo "[INFO] Setting up Maven to use local repository only..."
mkdir -p /root/.m2
cat <<EOF > /root/.m2/settings.xml
<settings>
<mirrors>
<mirror>
<id>local-repo</id>
<mirrorOf>*</mirrorOf>
<url>file:///root/.m2/repository</url>
</mirror>
</mirrors>
</settings>
EOF
echo "[INFO] Downloading Maven plugin: jmeter-maven-plugin:3.8.0 and dependencies..."
BASE_URL="https://repo1.maven.org/maven2"
M2_REPO="/root/.m2/repository"
# Utility function
download_artifact() {
GROUP_ID="$1"
ARTIFACT_ID="$2"
VERSION="$3"
GROUP_PATH=$(echo "$GROUP_ID" | tr '.' '/')
TARGET_DIR="$M2_REPO/$GROUP_PATH/$ARTIFACT_ID/$VERSION"
ARTIFACT_URL="$BASE_URL/$GROUP_PATH/$ARTIFACT_ID/$VERSION"
mkdir -p "$TARGET_DIR"
cd "$TARGET_DIR"
for ext in pom jar; do
FILE="$ARTIFACT_ID-$VERSION.$ext"
if [ ! -f "$FILE" ]; then
echo "[INFO] Downloading $FILE"
curl -s -O "$ARTIFACT_URL/$FILE"
touch "$FILE.lastUpdated"
fi
done
}
# Main plugin
download_artifact "com.lazerycode.jmeter" "jmeter-maven-plugin" "3.8.0"
# Known direct dependencies of jmeter-maven-plugin:3.8.0
# (Extracted from POM at https://repo1.maven.org/maven2/com/lazerycode/jmeter/jmeter-maven-plugin/3.8.0/jmeter-maven-plugin-3.8.0.pom)
download_artifact "org.apache.maven.plugins" "maven-plugin-plugin" "3.6.0"
download_artifact "org.apache.maven" "maven-plugin-api" "3.6.3"
download_artifact "org.apache.maven" "maven-core" "3.6.3"
download_artifact "org.apache.maven" "maven-artifact" "3.6.3"
download_artifact "org.codehaus.plexus" "plexus-utils" "3.2.0"
download_artifact "org.codehaus.plexus" "plexus-archiver" "4.2.3"
download_artifact "org.slf4j" "slf4j-api" "1.7.36"
download_artifact "commons-io" "commons-io" "2.11.0"
download_artifact "org.sonatype.oss" "oss-parent" "9"
echo "[INFO] Preloading done. You can run maven now in offline mode: mvn clean install --offline"