diff --git a/.gitignore b/.gitignore index f8004534c9c72..6315a9b4cc908 100644 --- a/.gitignore +++ b/.gitignore @@ -29,9 +29,6 @@ git-patch-prop-local.sh **/dotnet/libs/ *.classname* *.exe -.mvn/ -mvnw -mvnw.cmd #Ignore all Intellij IDEA files (except default inspections config) .idea/ diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000000000..b901097f2db6e --- /dev/null +++ b/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed 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. + */ +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000..2cc7d4a55c0cd Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000000..d4dd048ad2b89 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,19 @@ +# +# 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. +# + +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.3/apache-maven-3.8.3-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5e85ac6a56d44..bfe136beaf90c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -65,6 +65,6 @@ Inspection profile is placed to IDEA [Project_Default](.idea/inspectionProfiles/ ### Building project Usually all Maven builds are to be run with skipped tests: ``` -mvn -DskipTests +./mvnw -DskipTests ``` See also [DEVNOTES.txt](DEVNOTES.txt) diff --git a/DEVNOTES.txt b/DEVNOTES.txt index 8678fa3ed3603..7cd6f119ec049 100644 --- a/DEVNOTES.txt +++ b/DEVNOTES.txt @@ -1,29 +1,41 @@ +A Note about Invoking Maven +=========================== + +Apache Ignite build system uses Maven Wrapper to simplify and standardize build process. On different operating +systems, it should be run slightly differently: + +* On Unix-like systems (including Cygwin, WSL, git-bash), it's `./mvnw ` +* On Windows (in PowerShell), it's `./mvnw ` as well +* On Windows (in cmd shell), it's `.\mvnw ` or `mvnw ` (in older versions) + +Further in our documentation, we always use the ./mvnw form. Please adapt it to your system if needed. + Apache Ignite Maven Build Instructions ====================================== 1) Optional: build Apache Ignite.NET as described at modules/platforms/dotnet/DEVNOTES.txt. 2) Compile and install: - mvn clean install -Pall-java,all-scala,licenses -DskipTests + ./mvnw clean install -Pall-java,all-scala,licenses -DskipTests or if you have built Apache Ignite.NET on the first step use following command: (Note that 'doxygen' should be installed before running this command.) - mvn clean install -Pall-java,all-scala,licenses -DskipTests -DclientDocs + ./mvnw clean install -Pall-java,all-scala,licenses -DskipTests -DclientDocs 3) Javadoc generation (optional): - mvn initialize -Pjavadoc + ./mvnw initialize -Pjavadoc 4) Build Apache Ignite assembly: - mvn initialize -Prelease + ./mvnw initialize -Prelease Look for apache-ignite--bin.zip in ./target/bin directory. 5) Build Apache Ignite slim edition assembly: - mvn initialize -Prelease -Dignite.edition=apache-ignite-slim + ./mvnw initialize -Prelease -Dignite.edition=apache-ignite-slim Look for apache-ignite-slim--bin.zip in ./target/bin directory. @@ -34,20 +46,20 @@ Apache Ignite with LGPL Maven Build Instructions 2) Compile and install: - mvn clean install -Pall-java,all-scala,licenses -DskipTests + ./mvnw clean install -Pall-java,all-scala,licenses -DskipTests or if you have built Apache Ignite.NET on the first step use following command: (Note that 'doxygen' should be installed before running this command.) - mvn clean install -Pall-java,all-scala,licenses -DskipTests -DclientDocs + ./mvnw clean install -Pall-java,all-scala,licenses -DskipTests -DclientDocs 3) Javadoc generation with LGPL (optional): - mvn initialize -Pjavadoc,lgpl + ./mvnw initialize -Pjavadoc,lgpl 4) Build Apache Ignite assembly with LGPL dependencies: - mvn initialize -Prelease,lgpl -Dignite.edition=apache-ignite-lgpl + ./mvnw initialize -Prelease,lgpl -Dignite.edition=apache-ignite-lgpl Look for apache-ignite-lgpl--bin.zip in ./target/bin directory. @@ -133,18 +145,18 @@ Ignite Release Instructions 3.1) Deploy Ignite to maven repository, prepares sources and binaries. - mvn deploy -Papache-release,gpg,all-java,all-scala,licenses,deploy-ignite-site -Dignite.edition=apache-ignite -DskipTests + ./mvnw deploy -Papache-release,gpg,all-java,all-scala,licenses,deploy-ignite-site -Dignite.edition=apache-ignite -DskipTests 3.2) Javadoc generation: - mvn initialize -Pjavadoc + ./mvnw initialize -Pjavadoc 3.3) Assembly Apache Ignite: - mvn initialize -Prelease + ./mvnw initialize -Prelease NOTE: Nexus staging (repository.apache.org) should be closed with appropriate comment contains release version and - release candidate number, for example "Apache Ignite 1.0.0-rc7", when mvn deploy finished. + release candidate number, for example "Apache Ignite 1.0.0-rc7", when `./mvnw deploy` finished. 3.5) Checkout https://dist.apache.org/repos/dist/dev/ignite svn. Create release candidate folder with name equals to release version with "-rc*" ending, for example "1.0.0-rc7", at svn root. @@ -167,7 +179,7 @@ JCache TCK compliance ====================== To test compliance with JCache TCK use: - mvn test -P-release,jcache-tck -pl :ignite-core -am + ./mvnw test -P-release,jcache-tck -pl :ignite-core -am Ignite Mesos Maven Build Instructions @@ -192,7 +204,7 @@ Run tests ========= To run tests locally use: - mvn clean test -U -Plgpl,examples,-clean-libs,-release -Dmaven.test.failure.ignore=true -DfailIfNoTests=false -Dtest=%TEST_PATTERN% + ./mvnw clean test -U -Plgpl,examples,-clean-libs,-release -Dmaven.test.failure.ignore=true -DfailIfNoTests=false -Dtest=%TEST_PATTERN% For example, %TEST_PATTERN% can be 'org.apache.ignite.testsuites.IgniteBasicTestSuite' or 'GridCacheLocalAtomicFullApiSelfTest#testGet' @@ -200,7 +212,7 @@ Test suites ========= All unit tests must be included in any test suite. Travis runs a check for that. To check it locally run for the root project: - mvn test -Pcheck-test-suites + ./mvnw test -Pcheck-test-suites If you want to check a single module only: @@ -208,17 +220,17 @@ If you want to check a single module only: 2) Install ignite-tools with command: - mvn install -Pcheck-test-suites + ./mvnw install -Pcheck-test-suites 3) Run tests in the module: - mvn test + ./mvnw test Apache RAT Instructions ======================= To check license headers use: - mvn clean validate -Pcheck-licenses + ./mvnw clean validate -Pcheck-licenses For more information (e.g. exclude list) see "check-licenses" profile in "parent/pom.xml". diff --git a/docs/_docs/machine-learning/machine-learning.adoc b/docs/_docs/machine-learning/machine-learning.adoc index 9fd95fa580fc7..79176c9dd7c12 100644 --- a/docs/_docs/machine-learning/machine-learning.adoc +++ b/docs/_docs/machine-learning/machine-learning.adoc @@ -122,7 +122,7 @@ The latest Apache Ignite Machine Learning jar is always uploaded to the Maven re + [source, shell] ---- -mvn clean install -DskipTests -Dmaven.javadoc.skip=true +./mvnw clean install -DskipTests -Dmaven.javadoc.skip=true ---- 4. Locate the Machine Learning jar in your local Maven repository under the path `{user_dir}/.m2/repository/org/apache/ignite/ignite-ml/{ignite-version}/ignite-ml-{ignite-version}.jar`. diff --git a/docs/_docs/perf-and-troubleshooting/yardstick-benchmarking.adoc b/docs/_docs/perf-and-troubleshooting/yardstick-benchmarking.adoc index 127e7b83c55b5..d8401eec1eead 100644 --- a/docs/_docs/perf-and-troubleshooting/yardstick-benchmarking.adoc +++ b/docs/_docs/perf-and-troubleshooting/yardstick-benchmarking.adoc @@ -164,7 +164,7 @@ CONFIGS="-b 1 -sm PRIMARY_SYNC -dn PutBenchmark`IgniteNode" == Building From Sources -Run `mvn clean package -Pyardstick -pl modules/yardstick -am -DskipTests` in the Apache Ignite root directory. +Run `./mvnw clean package -Pyardstick -pl modules/yardstick -am -DskipTests` in the Apache Ignite root directory. This command will compile the project and also unpack the scripts from `yardstick-resources.zip` file to `modules/yardstick/target/assembly/bin` directory. diff --git a/docs/_docs/setup.adoc b/docs/_docs/setup.adoc index 47a83b28038b1..00dbfdb6e2735 100644 --- a/docs/_docs/setup.adoc +++ b/docs/_docs/setup.adoc @@ -190,7 +190,7 @@ For example, to install `ignite-hibernate` into your local repository, run this [source, shell] ---- -mvn clean install -DskipTests -Plgpl -pl modules/hibernate -am +./mvnw clean install -DskipTests -Plgpl -pl modules/hibernate -am ---- diff --git a/examples/DEVNOTES.txt b/examples/DEVNOTES.txt index ba578bb55a666..89389fee37be3 100644 --- a/examples/DEVNOTES.txt +++ b/examples/DEVNOTES.txt @@ -2,7 +2,7 @@ Ignite Examples Build Instructions ================================== 1) Compile and install Ignite from project root folder: - mvn clean install -Pall-java,all-scala,licenses -DskipTests + ./mvnw clean install -Pall-java,all-scala,licenses -DskipTests (If needed, refer DEVNOTES.txt in project root folder for most up-to-date build instructions.) diff --git a/examples/README.txt b/examples/README.txt index abb5d23b115d9..15e887d4a9bcd 100644 --- a/examples/README.txt +++ b/examples/README.txt @@ -33,9 +33,9 @@ at https://ignite.apache.org/download.cgi#sources. There are some ways to gain required libs from sources: -1) Run "mvn clean install -DskipTests -P lgpl" at Apache Ignite sources. +1) Run "./mvnw clean install -DskipTests -P lgpl" at Apache Ignite sources. This case will install lgpl-based libs to local maven repository. -2) Run "mvn clean package -DskipTests -Prelease,lgpl -Dignite.edition=apache-ignite-lgpl" at Apache Ignite sources. +2) Run "./mvnw clean package -DskipTests -Prelease,lgpl -Dignite.edition=apache-ignite-lgpl" at Apache Ignite sources. Required libs will appear at /target/release-package/libs/optional subfolders. Found libs should be copied to global or project's classpath. diff --git a/modules/geospatial/README.txt b/modules/geospatial/README.txt index 59143a0b40333..d8096dc3a231c 100644 --- a/modules/geospatial/README.txt +++ b/modules/geospatial/README.txt @@ -45,4 +45,4 @@ Apache binary releases cannot include LGPL dependencies. If you would like inclu optional LGPL dependencies into your release, you should download the source release from Ignite website and do the build with the following maven command: -mvn clean package -DskipTests -Prelease,lgpl +./mvnw clean package -DskipTests -Prelease,lgpl diff --git a/modules/hibernate-4.2/README.txt b/modules/hibernate-4.2/README.txt index 096b9d71867c8..ed1518b636dbc 100644 --- a/modules/hibernate-4.2/README.txt +++ b/modules/hibernate-4.2/README.txt @@ -45,4 +45,4 @@ Apache binary releases cannot include LGPL dependencies. If you would like inclu optional LGPL dependencies into your release, you should download the source release from Ignite website and do the build with the following maven command: -mvn clean package -DskipTests -Prelease,lgpl +./mvnw clean package -DskipTests -Prelease,lgpl diff --git a/modules/hibernate-5.1/README.txt b/modules/hibernate-5.1/README.txt index 53c5d181e3248..7631d38ba03d4 100644 --- a/modules/hibernate-5.1/README.txt +++ b/modules/hibernate-5.1/README.txt @@ -45,4 +45,4 @@ Apache binary releases cannot include LGPL dependencies. If you would like inclu optional LGPL dependencies into your release, you should download the source release from Ignite website and do the build with the following maven command: -mvn clean package -DskipTests -Prelease,lgpl +./mvnw clean package -DskipTests -Prelease,lgpl diff --git a/modules/ml/README.txt b/modules/ml/README.txt index d7e2fb9695dd7..75284f6584212 100644 --- a/modules/ml/README.txt +++ b/modules/ml/README.txt @@ -6,12 +6,12 @@ Apache Ignite ML Grid module provides machine learning features, along with invo # Local build with javadoc Run from project root: -mvn clean package -DskipTests -pl modules/ml -am +./mvnw clean package -DskipTests -pl modules/ml -am Apache binary releases cannot include LGPL dependencies. If you would like to activate native BLAS optimizations into your build, you should download the source release from Ignite website and do the build with the following maven command: -mvn clean package -Plgpl -DskipTests -pl modules/ml -am +./mvnw clean package -Plgpl -DskipTests -pl modules/ml -am Find generated jars in target folder. diff --git a/modules/platforms/cpp/examples/README.txt b/modules/platforms/cpp/examples/README.txt index 5957ea39cbdde..4ac8d8638218b 100644 --- a/modules/platforms/cpp/examples/README.txt +++ b/modules/platforms/cpp/examples/README.txt @@ -6,7 +6,7 @@ Common requirements * Java Development Kit (JDK) must be installed: https://java.com/en/download/index.jsp * JAVA_HOME environment variable must be set pointing to Java installation directory. * IGNITE_HOME environment variable must be set to Ignite installation directory. - * Ignite must be built and packaged using Maven. You can use the following Maven command: mvn clean package -DskipTests + * Ignite must be built and packaged using Maven. You can use the following Maven command: ./mvnw clean package -DskipTests * Apache Ignite C++ must be built according to instructions for your platform. Refer to $IGNITE_HOME/platforms/cpp/DEVNOTES.txt for instructions. * For odbc-example additionally ODBC Driver Manager must be present and installed on your platform and diff --git a/modules/schedule/README.txt b/modules/schedule/README.txt index 27490c4418eae..2fca991dbb586 100644 --- a/modules/schedule/README.txt +++ b/modules/schedule/README.txt @@ -44,4 +44,4 @@ Apache binary releases cannot include LGPL dependencies. If you would like inclu optional LGPL dependencies into your release, you should download the source release from Ignite website and do the build with the following maven command: -mvn clean package -DskipTests -Prelease,lgpl +./mvnw clean package -DskipTests -Prelease,lgpl diff --git a/modules/yardstick/DEVNOTES.txt b/modules/yardstick/DEVNOTES.txt index 13decca7fed1f..d835e04da880a 100644 --- a/modules/yardstick/DEVNOTES.txt +++ b/modules/yardstick/DEVNOTES.txt @@ -3,7 +3,7 @@ Building from Ignite sources Run -mvn clean package -Pall-java,all-other -pl modules/yardstick -am -DskipTests +./mvnw clean package -Pall-java,all-other -pl modules/yardstick -am -DskipTests in the Apache Ignite root directory. diff --git a/mvnw b/mvnw new file mode 100755 index 0000000000000..41c0f0c23db5d --- /dev/null +++ b/mvnw @@ -0,0 +1,310 @@ +#!/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() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + 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 + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# 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 [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +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/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --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. +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 "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000000000..86115719e5383 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE%