mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-16 02:38:44 +00:00
141 lines
7.8 KiB
Bash
Executable File
141 lines
7.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# Uses a gradle build in java/com.amazon.aws.aws-java-api to obtain the JARs for the AWS Java API (SDK)
|
|
# into the lib/ folder there, then generates a corresponding .classpath, META-INF/MANIFEST.MF, and build.properties file.
|
|
# Then, the java/com.amazon.aws.aws-java-api.updatesite/features/aws-sdk/feature.xml is adjusted to reflect the current version.
|
|
# The update site is then built locally into java/com.amazon.aws.aws-java-api.updatesite/target/repository which can then
|
|
# be tested with the local target platform definition. If everything works fine, the uploadAwsApiRepositoryToServer.sh script
|
|
# can be used to update the repository contents at p2.sapsailing.com with the updated local target platform repository contents.
|
|
LIB=lib
|
|
JAR=`which jar`
|
|
if [ "$JAR" = "" ]; then
|
|
JAR="$JAVA_HOME/bin/jar"
|
|
fi
|
|
CLASSPATH_FILE=".classpath"
|
|
MANIFEST_FILE="MANIFEST.MF"
|
|
BUILD_PROPERTIES_FILE="build.properties"
|
|
WORKSPACE=`realpath \`dirname $0\`/../..`
|
|
UPDATE_SITE_PROJECT=${WORKSPACE}/java/com.amazon.aws.aws-java-api.updatesite
|
|
SSE_RUNTIME_FEATURE_XML=${WORKSPACE}/java/com.sap.sse.feature.runtime/feature.xml
|
|
FEATURE_XML=${UPDATE_SITE_PROJECT}/features/aws-sdk/feature.xml
|
|
SITE_XML=${UPDATE_SITE_PROJECT}/site.xml
|
|
TARGET_DEFINITION="${WORKSPACE}/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-remote.target"
|
|
WRAPPER_BUNDLE="${WORKSPACE}/java/com.amazon.aws.aws-java-api"
|
|
cd ${WRAPPER_BUNDLE}
|
|
echo "Creating .project file from dot_project template to allow for Eclipse workspace import..."
|
|
cp dot_project .project
|
|
echo "Downloading libraries..."
|
|
rm -rf ${LIB}/*
|
|
JAVA_HOME=${JAVA8_HOME} ${WORKSPACE}/gradlew downloadLibs
|
|
cd ${LIB}
|
|
VERSION=`ls -1 aws-core-*.jar | grep -v -- -sources | sed -e 's/aws-core-\([.0-9]*\)\.jar/\1/' | sort | tail -n 1`
|
|
echo VERSION=${VERSION}
|
|
LIBS=`ls -1 | grep -v -- -sources\.jar`
|
|
echo "Generating the .classpath file..."
|
|
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
|
|
<classpath>" >${WRAPPER_BUNDLE}/${CLASSPATH_FILE}
|
|
for l in ${LIBS}; do
|
|
SOURCES_JAR=`basename $l .jar`-sources.jar
|
|
if [ -f ${SOURCES_JAR} ]; then
|
|
SOURCEPATH=" sourcepath=\"${LIB}/${SOURCES_JAR}\""
|
|
else
|
|
SOURCEPATH=""
|
|
fi
|
|
echo " <classpathentry exported=\"true\" kind=\"lib\" path=\"${LIB}/${l}\"${SOURCEPATH}/>" >>${WRAPPER_BUNDLE}/${CLASSPATH_FILE}
|
|
done
|
|
echo " <classpathentry kind=\"con\" path=\"org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8\"/>
|
|
<classpathentry kind=\"con\" path=\"org.eclipse.pde.core.requiredPlugins\"/>
|
|
<classpathentry kind=\"output\" path=\"bin\"/>
|
|
</classpath>" >>${WRAPPER_BUNDLE}/${CLASSPATH_FILE}
|
|
echo "Patching version ${VERSION} into pom.xml..."
|
|
# exclude SNAPSHOT version used for the parent pom; only match the explicit SDK version
|
|
sed -i -e 's/<version>\([0-9.]*\)<\/version>/<version>'${VERSION}'<\/version>/' ${WRAPPER_BUNDLE}/pom.xml
|
|
echo "Generating the META-INF/MANIFEST.MF file..."
|
|
mkdir -p "${WRAPPER_BUNDLE}/META-INF"
|
|
echo -n "Manifest-Version: 1.0
|
|
Bundle-ManifestVersion: 2
|
|
Bundle-Name: aws-java-api
|
|
Bundle-SymbolicName: com.amazon.aws.aws-java-api
|
|
Bundle-Version: ${VERSION}
|
|
Bundle-Vendor: Amazon
|
|
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
|
Bundle-ClassPath: " >${WRAPPER_BUNDLE}/META-INF/${MANIFEST_FILE}
|
|
for l in ${LIBS}; do
|
|
echo -n "lib/${l},
|
|
" >>${WRAPPER_BUNDLE}/META-INF/${MANIFEST_FILE}
|
|
done
|
|
echo " ...determining exported packages from libs to generate Export-Package in manifest..."
|
|
echo -n ".
|
|
Automatic-Module-Name: com.amazon.aws.aws-java-api
|
|
Export-Package:" >>${WRAPPER_BUNDLE}/META-INF/${MANIFEST_FILE}
|
|
PACKAGES=$(for l in ${LIBS}; do
|
|
"$JAR" tvf ${l} | grep "\.class\>" | sed -e 's/^.* \([^ ]*\)$/\1/' -e 's/\/[^/]*\.class\>//' | grep "^software/amazon"
|
|
done | sort -u | tr / . )
|
|
for p in `echo "${PACKAGES}" | while read i; do echo $i | sed -e 's/^\([-a-zA-Z0-9_.]*\)\>.*$/\1/'; done | head --lines=-1`; do
|
|
echo " ${p}," >>${WRAPPER_BUNDLE}/META-INF/${MANIFEST_FILE}
|
|
done
|
|
for p in `echo "${PACKAGES}" | while read i; do echo $i | sed -e 's/^\([-a-zA-Z0-9_.]*\)\>.*$/\1/'; done | tail --lines=1`; do
|
|
echo " ${p}" >>${WRAPPER_BUNDLE}/META-INF/${MANIFEST_FILE}
|
|
done
|
|
echo "Generating build.properties..."
|
|
echo -n "bin.includes = META-INF/,\\
|
|
." >${WRAPPER_BUNDLE}/${BUILD_PROPERTIES_FILE}
|
|
for l in ${LIBS}; do
|
|
echo -n ",\\
|
|
lib/${l}" >>${WRAPPER_BUNDLE}/${BUILD_PROPERTIES_FILE}
|
|
done
|
|
echo >>${WRAPPER_BUNDLE}/${BUILD_PROPERTIES_FILE}
|
|
echo "Building the wrapper bundle..."
|
|
cd ..
|
|
echo "NOT USING ${extra} arguments for Maven to avoid using local target definition already for building local repo"
|
|
echo "In folder $(pwd) using: mvn clean install"
|
|
JAVA_HOME=${JAVA8_HOME} mvn --batch-mode clean install
|
|
mkdir -p ${UPDATE_SITE_PROJECT}/plugins/aws-sdk
|
|
rm -rf ${UPDATE_SITE_PROJECT}/plugins/aws-sdk/*
|
|
# Note: the JAR ends up in target/ because the SDK project does not use any parent pom, so
|
|
# it doesn't inherit the output directory specification "bin/" from its parent, and
|
|
# target/ is the default.
|
|
mv target/com.amazon.aws.aws-java-api-${VERSION}.jar ${UPDATE_SITE_PROJECT}/plugins/aws-sdk/
|
|
echo "Unpacking source bundles..."
|
|
cd ${LIB}
|
|
for l in *-sources.jar; do
|
|
"${JAR}" xvf $l software
|
|
done
|
|
echo "Creating sources JAR..."
|
|
SOURCE_JAR_MANIFEST=source-manifest.mf
|
|
echo "Manifest-Version: 1.0
|
|
Bundle-SymbolicName: com.amazon.aws.aws-java-api.source
|
|
Bundle-Name: AWS SDK Sources
|
|
Bundle-Version: ${VERSION}
|
|
Eclipse-SourceBundle: com.amazon.aws.aws-java-api;version=\"${VERSION}\"
|
|
Bundle-ManifestVersion: 2" >${SOURCE_JAR_MANIFEST}
|
|
"${JAR}" cvfm com.amazon.aws.aws-java-api.source_${VERSION}.jar ${SOURCE_JAR_MANIFEST} software/
|
|
rm ${SOURCE_JAR_MANIFEST}
|
|
echo "Removing extracted sources..."
|
|
rm -rf software
|
|
mv com.amazon.aws.aws-java-api.source_${VERSION}.jar ${UPDATE_SITE_PROJECT}/plugins/aws-sdk
|
|
cd ${UPDATE_SITE_PROJECT}
|
|
echo "Patching update site's feature.xml..."
|
|
sed -i -e 's/^\( *\)version="[0-9.]*"/\1version="'${VERSION}'"/' ${FEATURE_XML}
|
|
echo "Patching com.sap.sse.feature.runtime's feature.xml..."
|
|
NEW_SSE_RUNTIME_FEATURE_XML_CONTENT=$( cat "${SSE_RUNTIME_FEATURE_XML}" | awk -v VERSION=${VERSION} '
|
|
/id="com.amazon.aws.aws-java-api"/ { IN_PLUGIN="true"; }
|
|
/id="com.amazon.aws.aws-java-api.source"/ { IN_PLUGIN_SOURCE="true"; }
|
|
{ if (IN_PLUGIN=="true" && $0 ~ / *version=".*"/) { print " version=\"" VERSION "\""; IN_PLUGIN="false"; } else
|
|
if (IN_PLUGIN_SOURCE=="true" && $0 ~ / *version=".*"/) { print " version=\"" VERSION "\""; IN_PLUGIN_SOURCE="false"; } else print $0; }
|
|
' )
|
|
echo "${NEW_SSE_RUNTIME_FEATURE_XML_CONTENT}" >"${SSE_RUNTIME_FEATURE_XML}"
|
|
echo "Patching update site's site.xml..."
|
|
sed -i -e 's/com.amazon.aws.aws-java-api\(\.source\)\?_\([0-9.]*\)\.jar/com.amazon.aws.aws-java-api\1_'${VERSION}'.jar/' -e '/feature url=/s/version="[0-9.]*"/version="'${VERSION}'"/' ${SITE_XML}
|
|
echo "Building update site..."
|
|
echo "In folder $(pwd) using: mvn ${extra} clean install"
|
|
JAVA_HOME=${JAVA8_HOME} mvn ${extra} clean install
|
|
echo "Patching SDK version ${VERSION} in target platform definition ${TARGET_DEFINITION}..."
|
|
sed -i -e 's/<unit id="com.amazon.aws.aws-java-api.feature.group" version="[0-9.]*"\/>/<unit id="com.amazon.aws.aws-java-api.feature.group" version="'${VERSION}'"\/>/' ${TARGET_DEFINITION}
|
|
echo "You may test your target platform locally by creating race-analysis-p2-local.target by running the script createLocalTargetDef.sh."
|
|
echo "You can also try a Hudson build with the -v option, generating and using the local target platform during the build."
|
|
echo "In this case, start with an unpatched remote target platform (race-analysis-p2-remote.target) and an unpatched"
|
|
echo "java/com.sap.sse.feature.runtime/feature.xml so that running this script during the Hudson build can resolve"
|
|
echo "the target platform."
|
|
echo "When all this works, commit and push the patched to race-analysis-p2-remote.target and feature.xml"
|
|
echo "and update the P2 repository at p2.sapsailing.com using the script uploadAwsApiRepositoryToServer.sh."
|