| #!/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. |
| # |
| |
| ## Get the Apache Edgent jars and their transitive external dependencies. |
| ## Requires that maven (mvn) be installed and on the PATH |
| ## |
| ## By default get the Edgent java8 platform jars for the script's default Edgent version. |
| ## |
| ## --platform {java8|java7|android} get the specified target platform jars |
| ## --version edgent-version get the specified version's jars (e.g., 1.2.0-SNAPSHOT) |
| ## --artifacts csv-gav-list get only the specified artifacts. Not restricted to Edgent jars. |
| ## The Edgent version is substituted for all instances of '{EV}' |
| ## --file gav-file get only the specified artifacts. Not restricted to Edgent jars. |
| ## The Edgent version is substituted for all instances of '{EV}' |
| ## Lines that begin with '#' are ignored. |
| ## |
| ## Creates the directory get-edgent-jars-project and a maven project in it |
| |
| USAGE="usage: [--platform {java8|java7|android}] [--version edgent-version] [--artifacts csv-gav-list] [--file gav-file]" |
| |
| set -e |
| |
| EDGENT_PLATFORM=java8 |
| EDGENT_VERSION=1.2.0 |
| SLF4J_VERSION=1.7.12 |
| |
| PROJ_DIR=get-edgent-jars-project |
| |
| if [ "$1" = "--platform" -a $# -gt 1 ]; then |
| EDGENT_PLATFORM=$2; shift; shift |
| fi |
| if [ "$1" = "--version" -a $# -gt 1 ]; then |
| EDGENT_VERSION=$2; shift; shift |
| fi |
| OPT_GAVS= |
| if [ "$1" = "--artifacts" -a $# -gt 1 ]; then |
| OPT_CSV_GAVS=$2; shift; shift |
| OPT_GAVS=`echo "${OPT_CSV_GAVS}" | sed -e 's/,/ /g'` |
| fi |
| if [ "$1" = "--file" -a $# -gt 1 ]; then |
| OPT_GAVS_FILE=$2; shift; shift |
| OPT_GAVS=`sed -e '/^#/d' < ${OPT_GAVS_FILE}` |
| fi |
| if [ $# != 0 ]; then |
| echo "$USAGE" |
| exit 1 |
| fi |
| |
| # only declare "top level" Edgent components that a user |
| # would directly declare/use and let these components |
| # (most typically the provider) pull in the rest of the |
| # Edgent jars (and their dependencies) |
| # |
| # Explicitly add edgent-connectors-websocket-jetty |
| # as there's not a direct dependency on it from connectors-websocket. |
| # |
| # Hmm... consider adding org.apache.edgent.console:edgent-console-servlets:{EV}:war |
| # It's bundled in edgent-console-server.jar. Having it separately available |
| # would enable having the "console" in a Servler engine of the user's choosing. |
| # If added, may want to put it in a directory other than edgent-jars. |
| # |
| DEFAULT_GAVS=`cat << EOF |
| org.slf4j:slf4j-jdk14:${SLF4J_VERSION} |
| org.apache.edgent.analytics:edgent-analytics-math3:{EV} |
| org.apache.edgent.analytics:edgent-analytics-sensors:{EV} |
| org.apache.edgent.connectors:edgent-connectors-command:{EV} |
| org.apache.edgent.connectors:edgent-connectors-csv:{EV} |
| org.apache.edgent.connectors:edgent-connectors-file:{EV} |
| org.apache.edgent.connectors:edgent-connectors-http:{EV} |
| org.apache.edgent.connectors:edgent-connectors-iot:{EV} |
| org.apache.edgent.connectors:edgent-connectors-iotp:{EV} |
| org.apache.edgent.connectors:edgent-connectors-jdbc:{EV} |
| org.apache.edgent.connectors:edgent-connectors-kafka:{EV} |
| org.apache.edgent.connectors:edgent-connectors-mqtt:{EV} |
| org.apache.edgent.connectors:edgent-connectors-pubsub:{EV} |
| org.apache.edgent.connectors:edgent-connectors-serial:{EV} |
| org.apache.edgent.connectors:edgent-connectors-websocket:{EV} |
| org.apache.edgent.connectors:edgent-connectors-websocket-jetty:{EV} |
| org.apache.edgent.providers:edgent-providers-development:{EV} |
| org.apache.edgent.providers:edgent-providers-direct:{EV} |
| org.apache.edgent.providers:edgent-providers-iot:{EV} |
| org.apache.edgent.utils:edgent-utils-metrics:{EV} |
| org.apache.edgent.utils:edgent-utils-streamscope:{EV} |
| EOF |
| ` |
| if [ "${EDGENT_PLATFORM}" != "java8" ]; then |
| DEFAULT_GAVS=`echo "${DEFAULT_GAVS}" | sed -e "s/apache.edgent/apache.edgent.${EDGENT_PLATFORM}/"` |
| fi |
| if [ "${EDGENT_PLATFORM}" == "android" ]; then |
| DEFAULT_GAVS=`echo "${DEFAULT_GAVS}" | sed -e "/edgent-providers-development/d"` |
| DEFAULT_GAVS=`echo "${DEFAULT_GAVS}"; echo "org.apache.edgent.android.android:edgent-android-hardware:{EV}"` |
| DEFAULT_GAVS=`echo "${DEFAULT_GAVS}"; echo "org.apache.edgent.android.android:edgent-android-topology:{EV}"` |
| fi |
| |
| |
| function confirm () { # [$1: question] |
| while true; do |
| # call with a prompt string or use a default |
| /bin/echo -n "${1:-Are you sure?}" |
| read -r -p " [y/n] " response |
| case $response in |
| [yY]) return `true` ;; |
| [nN]) return `false` ;; |
| *) echo "illegal response '$response'" ;; |
| esac |
| done |
| } |
| |
| ########################### |
| cat <<EOF |
| This command downloads the Apache Edgent jars and their transitive external dependencies. |
| The external dependencies have their own licensing term that you should review. |
| A summary of the external dependencies can be found here <TODO URL>. |
| EOF |
| confirm "Continue?" || exit |
| |
| ########################### |
| if [ ! -d ${PROJ_DIR} ]; then |
| echo "##### Generating maven project ${PROJ_DIR}..." |
| mvn -B archetype:generate \ |
| -DarchetypeGroupId=org.apache.maven.archeTypes \ |
| -DgroupId=org.apache.edgent.tools \ |
| -DartifactId=${PROJ_DIR} \ |
| -Dversion=1.0 |
| cp ${PROJ_DIR}/pom.xml ${PROJ_DIR}/pom.xml.orig |
| else |
| cp ${PROJ_DIR}/pom.xml.orig ${PROJ_DIR}/pom.xml |
| fi |
| |
| ########################### |
| |
| cd ${PROJ_DIR} |
| |
| ########################### |
| |
| ########################### |
| echo |
| echo "##### Generating dependency decls..." |
| ARTIFACT_GAVS="${OPT_GAVS:-${DEFAULT_GAVS}}" |
| ARTIFACT_GAVS=`echo "${ARTIFACT_GAVS}" | sed -e "s/{EV}/${EDGENT_VERSION}/g"` |
| mkdir -p target |
| DEP_DECLS_FILE=target/tmp-dep-decls |
| rm -f ${DEP_DECLS_FILE} |
| for i in ${ARTIFACT_GAVS}; do |
| echo $i | awk -F : '{ type=""; if ($4 != "") type=" <type>" $4 "</type>\n"; printf "<dependency>\n <groupId>%s</groupId>\n <artifactId>%s</artifactId>\n <version>%s</version>\n%s</dependency>\n", $1, $2, $3, type }' >> ${DEP_DECLS_FILE} |
| done |
| DEP_DECLS=`cat ${DEP_DECLS_FILE}` |
| |
| ########################### |
| echo |
| echo "##### Adding dependency decls to pom..." |
| ed pom.xml <<EOF |
| /<dependencies> |
| a |
| ${DEP_DECLS} |
| . |
| wq |
| EOF |
| |
| ########################### |
| echo |
| echo "##### Retrieving jars into local maven repo..." |
| mvn clean compile |
| |
| ########################### |
| echo |
| echo "##### Copying jars..." |
| mvn dependency:copy-dependencies -DincludeScope=runtime |
| |
| DEPS_SRC_DIR=target/dependency |
| EDGENT_DEPS_DIR=${EDGENT_PLATFORM}/edgent-jars |
| EXT_DEPS_DIR=${EDGENT_PLATFORM}/ext-jars |
| |
| rm -rf "${EDGENT_DEPS_DIR}"; mkdir -p ${EDGENT_DEPS_DIR} |
| rm -rf "${EXT_DEPS_DIR}"; mkdir -p ${EXT_DEPS_DIR} |
| |
| cp ${DEPS_SRC_DIR}/* ${EXT_DEPS_DIR} |
| |
| for i in `find ${EXT_DEPS_DIR} -name 'edgent-*.*ar'`; do |
| mv $i ${EDGENT_DEPS_DIR} |
| done |
| |
| ########################### |
| echo |
| echo "##### Generating classpath.sh..." |
| cat << 'EOF' > ${EDGENT_PLATFORM}/classpath.sh |
| #!/bin/sh |
| set -e |
| if [ "${1}" = "" -o "${1}" = "-?" -o "${1}" = "-help" ]; then |
| echo "usage: classpath.sh <path-to-parent-of-edgent-jars-dir>" |
| exit 1 |
| fi |
| BASEDIR=${1} |
| cd ${BASEDIR} |
| SEP= |
| CP= |
| if [ "`ls edgent-jars 2>/dev/null`" != "" ]; then |
| for i in edgent-jars/*; do |
| CP="${CP}${SEP}${BASEDIR}/${i}" |
| SEP=":" |
| done |
| fi |
| if [ "`ls ext-jars 2>/dev/null`" != "" ]; then |
| for i in ext-jars/*; do |
| if [[ ${i} == */slf4j-* ]] && [[ ${i} != */slf4j-api-* ]] ; then |
| continue |
| fi |
| CP="${CP}${SEP}${BASEDIR}/${i}" |
| SEP=":" |
| done |
| fi |
| echo "${CP}" |
| EOF |
| chmod +x ${EDGENT_PLATFORM}/classpath.sh |
| |
| ########################### |
| echo |
| echo "##### The Edgent jars are in ${PROJ_DIR}/${EDGENT_DEPS_DIR}" |
| echo "##### The external jars are in ${PROJ_DIR}/${EXT_DEPS_DIR}" |
| echo "##### CLASSPATH may be set by copying ${PROJ_DIR}/${EDGENT_PLATFORM}/classpath.sh and using it like:" |
| echo '##### export CLASSPATH=`classpath.sh path-to-parent-of-edgent-jars-dir`' |