#!/bin/bash ## Compares the ant jars to the maven jars and makes sure they're the same ## (or different where/how expected) ## Note: The no_aop build doesn't compare cleanly for some reason. ## Maybe a difference between the ant & maven munge preprocessor? RETVAL=0 function cleanAndBuild { mvn clean > /dev/null ant clean.all > /dev/null #ant no_aop > /dev/null ant dist > /dev/null mvn package -DskipTests=true -Dmaven.javadoc.skip=true > /dev/null #ant -f build/no_aop/build.xml dist > /dev/null } function findAndCompareJars { version=4.0 for ANT in `find ./build/dist/* -name "*-snapshot.jar" ` do if [ $ANT = "./build/dist/guice-snapshot.jar" ]; then ## Check the main build. MVN=./core/target/guice-$version-SNAPSHOT.jar extension=core compareJars "$ANT" "$MVN" $extension #compareJars "./build/no_aop/$ANT" "./core/target/guice-$version-SNAPSHOT-no_aop.jar" "no_aop: $extension" else ## Check extensions. extension=`echo $ANT | awk -F"-" '{print $2 }'` MVN=./extensions/$extension/target/guice-$extension-$version-SNAPSHOT.jar compareJars "$ANT" "$MVN" $extension fi done; } function compareJars { ANT=$1 MVN=$2 extension=$3 curdir=`pwd` echo Comparing $3 mkdir "tmp$$" cp $ANT tmp$$/ant.jar cp $MVN tmp$$/mvn.jar cd "tmp$$" mkdir ant mkdir mvn cd ant jar -xf ../ant.jar cd .. cd mvn jar -xf ../mvn.jar cd .. ## ant puts LICENSE & NOTICE files in a different place echo LICENSE > excludes echo NOTICE >> excludes ## ant does not create DEPENDENCIES echo DEPENDENCIES >> excludes ## ant/mvn slightly different in MANIFEST.MF echo MANIFEST.MF >> excludes ## ant leaves empty directories for some jarjar'd paths -- ## we grep -v instead of exclude because we want to make sure ## if any files in those directories exist, that they're diff'd. ## ant 1.8+ also creates package-info classes all the time, and ## maven doesn't -- so we just ignore the package-info classes. diff -u --recursive -Xexcludes ant mvn | \ grep -v "^Only in ant/com/google/inject/internal/asm: signature$" | \ grep -v "^Only in ant/com/google/inject/internal/cglib: beans$" | \ grep -v "^Only in ant/com/google/inject/internal/cglib: transform$" | \ grep -v "^Only in ant/com/google/inject/internal/cglib/transform: impl$" | \ grep -v "^Only in ant/com/google/inject/internal/cglib: util$" | \ grep -v "^Only in ant: net$" | \ grep -v "^Only in ant: org$" | \ grep -v "^Only in ant/com/google/inject/.*: package-info\.class$" # failure is 0 because we're using grep -v to filter things out if [ $? -eq 0 ]; then export RETVAL=1 fi cd "$curdir" rm -rf "tmp$$" } ## Only bother doing this on the jdk8/mvn build (before we publish snapshots). ## Otherwise it's a waste of time building mvn+ant each time. if [ "$TRAVIS_JDK_VERSION" == "oraclejdk8" ] && \ [ "$LABEL" == "mvn" ]; then echo "Cleaning and building ant & maven..." cleanAndBuild echo "Starting to compare jars..." echo findAndCompareJars if [ $RETVAL -eq 0 ]; then echo "Everything looks good!" exit 0 else echo "Some things don't match -- see above for details." exit 1 fi fi