From 59183ace186cd60f9285f7f3ff431d1e515fab1f Mon Sep 17 00:00:00 2001 From: rfscholte Date: Sun, 10 May 2020 20:00:11 +0200 Subject: [PATCH] [MNG-5937] Adjust JenkinsFile to pick up wrapper dists Improve assembly --- Jenkinsfile | 24 ++- maven-wrapper/src/assembly/bin.xml | 48 +++-- maven-wrapper/src/assembly/script.xml | 34 ++- maven-wrapper/src/assembly/shared/mvnw | 126 +++++------ maven-wrapper/src/assembly/source.xml | 37 +++- maven-wrapper/src/assembly/source/mvnw | 278 +++++++++++++++++++++++++ 6 files changed, 448 insertions(+), 99 deletions(-) mode change 100644 => 100755 maven-wrapper/src/assembly/shared/mvnw create mode 100755 maven-wrapper/src/assembly/source/mvnw diff --git a/Jenkinsfile b/Jenkinsfile index 313fbb84f6..8a503d765e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -58,11 +58,16 @@ node(jenkinsEnv.nodeSelection(osNode)) { invokerPublisher(), pipelineGraphPublisher() ]) { - sh "mvn clean ${MAVEN_GOAL} -B -U -e -fae -V -Dmaven.test.failure.ignore=true" + // For now: maven-wrapper contains 2 poms sharing the same outputDirectory, so separate clean + sh "mvn clean" + sh "mvn ${MAVEN_GOAL} -B -U -e -fae -V -Dmaven.test.failure.ignore=true" } dir ('apache-maven/target') { sh "mv apache-maven-*-bin.zip apache-maven-dist.zip" - stash includes: 'apache-maven-dist.zip', name: 'dist' + stash includes: 'apache-maven-dist.zip', name: 'maven-dist' + } + dir ('maven-wrapper/target') { + stash includes: 'apache-maven-wrapper-*.zip,maven-wrapper.jar', name: 'wrapper-dist' } } @@ -91,17 +96,24 @@ for (String os in runITsOses) { def WORK_DIR=pwd() checkout tests if (isUnix()) { - sh "rm -rvf $WORK_DIR/apache-maven-dist.zip $WORK_DIR/it-local-repo" + sh "rm -rvf $WORK_DIR/dists $WORK_DIR/it-local-repo" } else { bat "if exist it-local-repo rmdir /s /q it-local-repo" - bat "if exist apache-maven-dist.zip del /q apache-maven-dist.zip" + bat "if exist dists rmdir /s /q dists" + } + dir('dists') { + unstash 'maven-dist' + unstash 'wrapper-dist' + + if (isUnix()) { + sh 'zipinfo apache-maven-wrapper-3.7.0-SNAPSHOT-bin.zip' + } } - unstash 'dist' try { withMaven(jdk: jdkName, maven: mvnName, mavenLocalRepo:"${WORK_DIR}/it-local-repo", options:[ junitPublisher(ignoreAttachments: false) ]) { - String cmd = "${runITscommand} -DmavenDistro=$WORK_DIR/apache-maven-dist.zip -Dmaven.test.failure.ignore=true" + String cmd = "${runITscommand} -DmavenDistro=$WORK_DIR/dists/apache-maven-dist.zip -Dmaven.test.failure.ignore=true -DmavenWrapper=$WORK_DIR/dists/maven-wrapper.jar -DwrapperDistroDir=${WORK_DIR}/dists" if (isUnix()) { sh 'df -hT' diff --git a/maven-wrapper/src/assembly/bin.xml b/maven-wrapper/src/assembly/bin.xml index 5f350a642d..be127703cd 100644 --- a/maven-wrapper/src/assembly/bin.xml +++ b/maven-wrapper/src/assembly/bin.xml @@ -28,25 +28,45 @@ under the License. zip false - - - src/assembly/shared - . - true - - - target - - - - .mvn/wrapper - - + + src/assembly/shared/mvnwDebug.cmd + . + dos + + + src/assembly/shared/mvnwDebug + . + unix + 0755 + + + src/assembly/shared/mvnw.cmd + . + dos + true + + + src/assembly/shared/mvnw + . + unix + 0755 + true + target/maven-wrapper.jar .mvn/wrapper maven-wrapper.jar + + + src/assembly/shared + . + + .mvn/** + + true + + \ No newline at end of file diff --git a/maven-wrapper/src/assembly/script.xml b/maven-wrapper/src/assembly/script.xml index 010125802b..252558fa9d 100644 --- a/maven-wrapper/src/assembly/script.xml +++ b/maven-wrapper/src/assembly/script.xml @@ -28,18 +28,40 @@ under the License. zip false + + + src/assembly/shared/mvnwDebug.cmd + . + dos + + + src/assembly/shared/mvnwDebug + . + unix + 0755 + + + src/assembly/shared/mvnw.cmd + . + dos + true + + + src/assembly/shared/mvnw + . + unix + 0755 + true + + src/assembly/shared . - true - - - target - + .mvn/** - .mvn/wrapper + true \ No newline at end of file diff --git a/maven-wrapper/src/assembly/shared/mvnw b/maven-wrapper/src/assembly/shared/mvnw old mode 100644 new mode 100755 index 9a5de57ffd..e60304c74a --- a/maven-wrapper/src/assembly/shared/mvnw +++ b/maven-wrapper/src/assembly/shared/mvnw @@ -18,6 +18,7 @@ # under the License. # ---------------------------------------------------------------------------- + # ---------------------------------------------------------------------------- # Maven Start Up Batch script # @@ -164,27 +165,48 @@ CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher # traverses directory structure from process work directory to filesystem root # first directory with .mvn subdirectory is considered project base directory find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" +( + basedir=`find_file_argument_basedir "$@"` + wdir="${basedir}" while [ "$wdir" != '/' ] ; do if [ -d "$wdir"/.mvn ] ; then basedir=$wdir break fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround + wdir=`cd "$wdir/.."; pwd` done echo "${basedir}" +) +} + +find_file_argument_basedir() { +( + basedir=`pwd` + + found_file_switch=0 + for arg in "$@"; do + if [ ${found_file_switch} -eq 1 ]; then + if [ -d "${arg}" ]; then + basedir=`cd "${arg}" && pwd -P` + elif [ -f "${arg}" ]; then + basedir=`dirname "${arg}"` + basedir=`cd "${basedir}" && pwd -P` + if [ ! -d "${basedir}" ]; then + echo "Directory ${basedir} extracted from the -f/--file command-line argument ${arg} does not exist" >&2 + exit 1 + fi + else + echo "POM file ${arg} specified with the -f/--file command line argument does not exist" >&2 + exit 1 + fi + break + fi + if [ "$arg" = "-f" -o "$arg" = "--file" ]; then + found_file_switch=1 + fi + done + echo "${basedir}" +) } # concatenates all lines of a file @@ -194,16 +216,23 @@ concat_lines() { fi } -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; +MAVEN_PROJECTBASEDIR="${MAVEN_BASEDIR:-`find_maven_basedir "$@"`}" +MAVEN_OPTS="`concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config"` $MAVEN_OPTS" + +# For Cygwin, switch project base directory path to Windows format before +# executing Maven otherwise this will cause Maven not to consider it. +if $cygwin ; then + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` fi +export MAVEN_PROJECTBASEDIR + ########################################################################################## # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central # This allows using the maven wrapper in projects that prohibit checking in binary data. ########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then +if [ -r "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" ]; then if [ "$MVNW_VERBOSE" = true ]; then echo "Found .mvn/wrapper/maven-wrapper.jar" fi @@ -211,24 +240,26 @@ else if [ "$MVNW_VERBOSE" = true ]; then echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/org/apache/maven/maven-wrapper/${project.version}/maven-wrapper-${project.version}.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/maven-wrapper/${project.version}/maven-wrapper-${project.version}.jar" - fi + + jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/maven-wrapper/${project.version}/maven-wrapper-${project.version}.jar" while IFS="=" read key value; do case "$key" in (wrapperUrl) jarUrl="$value"; break ;; esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/org/apache/maven/maven-wrapper/${project.version}/maven-wrapper-${project.version}.jar" + fi + if [ "$MVNW_VERBOSE" = true ]; then echo "Downloading from: $jarUrl" fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" if $cygwin; then wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` fi - if command -v wget > /dev/null; then + if [ `echo "${jarUrl}" | cut -c 1-4` != 'file' ] && command -v wget > /dev/null; then if [ "$MVNW_VERBOSE" = true ]; then echo "Found wget ... using wget" fi @@ -246,55 +277,12 @@ else else curl --location --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi fi fi ########################################################################################## # End of extension ########################################################################################## -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi # Provide a "standardized" way to retrieve the CLI args that will # work with both Windows and non-Windows executions. diff --git a/maven-wrapper/src/assembly/source.xml b/maven-wrapper/src/assembly/source.xml index 99c27c046b..e2e0674519 100644 --- a/maven-wrapper/src/assembly/source.xml +++ b/maven-wrapper/src/assembly/source.xml @@ -28,18 +28,47 @@ under the License. zip false + + + src/assembly/shared/mvnwDebug.cmd + . + dos + + + src/assembly/shared/mvnwDebug + . + unix + 0755 + + + src/assembly/source/mvnw.cmd + . + dos + true + + + src/assembly/source/mvnw + . + unix + 0755 + true + + src/assembly/shared . + + .mvn/** + true - - mvnw.cmd - - + src/assembly/source . + + .mvn/** + true diff --git a/maven-wrapper/src/assembly/source/mvnw b/maven-wrapper/src/assembly/source/mvnw new file mode 100755 index 0000000000..b4067fbde9 --- /dev/null +++ b/maven-wrapper/src/assembly/source/mvnw @@ -0,0 +1,278 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { +( + basedir=`find_file_argument_basedir "$@"` + wdir="${basedir}" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + wdir=`cd "$wdir/.."; pwd` + done + echo "${basedir}" +) +} + +find_file_argument_basedir() { +( + basedir=`pwd` + + found_file_switch=0 + for arg in "$@"; do + if [ ${found_file_switch} -eq 1 ]; then + if [ -d "${arg}" ]; then + basedir=`cd "${arg}" && pwd -P` + elif [ -f "${arg}" ]; then + basedir=`dirname "${arg}"` + basedir=`cd "${basedir}" && pwd -P` + if [ ! -d "${basedir}" ]; then + echo "Directory ${basedir} extracted from the -f/--file command-line argument ${arg} does not exist" >&2 + exit 1 + fi + else + echo "POM file ${arg} specified with the -f/--file command line argument does not exist" >&2 + exit 1 + fi + break + fi + if [ "$arg" = "-f" -o "$arg" = "--file" ]; then + found_file_switch=1 + fi + done + echo "${basedir}" +) +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +MAVEN_PROJECTBASEDIR="${MAVEN_BASEDIR:-`find_maven_basedir "$@"`}" +MAVEN_OPTS="`concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config"` $MAVEN_OPTS" + +# For Cygwin, switch project base directory path to Windows format before +# executing Maven otherwise this will cause Maven not to consider it. +if $cygwin ; then + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +export MAVEN_PROJECTBASEDIR + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"