Wednesday, February 4, 2009

Shell script to use Maven2 to build jar libraries

Invoke this bldjar with:
sudo -u maven /home/maven/bldjar $1 $2 $3 $4
Don't forget to add your user to the sudoers file.

> cat bldjar



#!/bin/sh
# ===================================================================
# This script builds a maven2 jar project, commits the new jar to CVS
# and optionally registers the new jar as a reusable library in maven.
# Alan Lupsha
# ====================================================================

# environment variables
export JAVA_HOME=/opt/SDK/jdk
export CVSROOT=/maven/cvsroot

PROJECT=$1
REGISTER_JAR=$2
GROUP=$3
ARTIFACT=$4
MAVEN_DIR=/home/maven
LAST_UPDATE="2009.02.04"
OK_TO_REGISTER_JAR="no"

check_user_arguments()
{
if [ "$PROJECT" = "" ] ; then
echo "[ALAN] You must pass the project name as an argument! ex: sudo -u maven /home/maven/bldjar my-abc"
PROJECT="noProjectSpecified"
RETURN_CODE=1
OK_TO_REGISTER_JAR="no"
exit $RETURN_CODE
fi

if [ "$REGISTER_JAR" = "registerjar" ] ; then
if [ "$GROUP" = "" ] ; then
echo "[ALAN] Error: invalid group. You asked to register the jar in group ->$GROUP<-"
echo "[ALAN] Syntax: bldjar registerjar GROUP ARTIFACT"
RETURN_CODE=1
OK_TO_REGISTER_JAR="no"
exit $RETURN_CODE
else
echo "[ALAN] Registering jar: group is ok: $GROUP"
fi
if [ "$ARTIFACT" = "" ] ; then
echo "[ALAN] Error: invalid artifact. You asked to register the jar using artifact ->$ARTIFACT<-"
echo "[ALAN] Syntax: bldjar registerjar GROUP ARTIFACT"
RETURN_CODE=1
OK_TO_REGISTER_JAR="no"
exit $RETURN_CODE
else
echo "[ALAN] Registering jar: artifact is ok: $ARTIFACT"
OK_TO_REGISTER_JAR="yes"
fi
else
REGISTER_JAR="dontregisterjar"
fi
echo "[ALAN] Your saved arguments are: $PROJECT $REGISTER_JAR $GROUP $ARTIFACT"
}


set_up_directories()
{
# set up the directories, copy source
cd $MAVEN_DIR
mkdir $MAVEN_DIR/projects/
cd $MAVEN_DIR/projects
cvs checkout $PROJECT
cd $MAVEN_DIR/projects/$PROJECT/
mkdir TEMP
mv src/* TEMP/
mkdir src/main/
mkdir src/main/java
mv TEMP/* src/main/java
}


perform_build()
{
# perform the build
/maven/maven-2.0.6/bin/mvn --offline clean package > $MAVEN_DIR/projects/$PROJECT/build.log
cat $MAVEN_DIR/projects/$PROJECT/build.log
cvs add -m 'your build log' build.log
cvs commit -m 'your build log' build.log
}


commit_the_jar()
{
# go into the target dir, there may or may NOT be something in there
mkdir $MAVEN_DIR/projects/$PROJECT/target/
cd $MAVEN_DIR/projects/$PROJECT/target/
JAR_NAME=`ls *.jar`
echo "[ALAN] Your jar file name is $JAR_NAME"

# just in case this doesn't exist
mkdir $MAVEN_DIR/projects/$PROJECT/dist/

# if the jar already existed, commit it
if [ -f "$MAVEN_DIR/projects/$PROJECT/dist/$JAR_NAME" ] ; then
rm $MAVEN_DIR/projects/$PROJECT/dist/$JAR_NAME
cp $MAVEN_DIR/projects/$PROJECT/target/$JAR_NAME $MAVEN_DIR/projects/$PROJECT/dist/
cd $MAVEN_DIR/projects/$PROJECT/dist/
cvs commit -m 'newly built' $JAR_NAME

# if the jar is brand new, add it to CVS and commit it
else
echo "[ALAN] Adding new file to CVS - first time ever"
cp $MAVEN_DIR/projects/$PROJECT/target/$JAR_NAME $MAVEN_DIR/projects/$PROJECT/dist/

cd $MAVEN_DIR/projects/$PROJECT/dist/
cvs add -m 'newly added' $JAR_NAME
cvs commit -m 'newly-added now committed by bldjar script' $JAR_NAME
fi
}

perform_cleanup()
{
# clean up
echo "[ALAN] Now cleaning up, removing $MAVEN_DIR/projects/$PROJECT/"
rm -Rf $MAVEN_DIR/projects/$PROJECT/

echo "[ALAN] Script version was last updated on: $LAST_UPDATE"
echo "[ALAN] Any questions, comments, concerns? Email me at: "
}

register_jar_as_library()
{
# check if we need to register the jar
if [ "$OK_TO_REGISTER_JAR" = "yes" ] ; then
echo "[ALAN] Now registering your jar as a dependency in the maven lib directory structure..."
extract_rvl_from_jar_name
/maven/maven-2.0.6/bin/mvn install:install-file -DgroupId=$GROUP -DartifactId=$ARTIFACT -Dversion=$RVL -Dpackaging=jar -Dfile=$MAVEN_DIR/projects/$PROJECT/dist/$JAR_NAME
echo "[ALAN] If the above registration was successful, don't forget to add this to your pom.xml:"
echo " <dependency>"
echo " <groupId>$GROUP</groupId>"
echo " <artifactId>$ARTIFACT</artifactId>"
echo " <version>$RVL</version>"
echo " </dependency>"
echo " "
else
echo "[ALAN] I'm not registering your jar as a library. Syntax for that is: ./bldjar YOUR-PROJECT registerjar GROUP ARTIFACT"
fi
}


extract_rvl_from_jar_name()
{
STR=$JAR_NAME
len=${#STR}
REV=""
for (( i=$len ; i>0 ; i-- ))
do
REV=$REV""${STR:$i-1:$i}
STR=${STR%${STR:$i-1:$i}}
done
#echo "Reversed string $REV"
#ex: raj.3.2.1-reganamytiruces-ped

NAME=`echo $REV | cut -f1 -d'-'`
#echo "$NAME"
#ex: raj.3.2.1

STR=$NAME
len=${#STR}
REV=""
for (( i=$len ; i>0 ; i-- ))
do
REV=$REV""${STR:$i-1:$i}
STR=${STR%${STR:$i-1:$i}}
done
#echo "Reversed string $REV"
#ex: 1.2.3.jar

FULLLEN=${#REV}
ENDPOS=FULLLEN-4
RVL=${REV:0:ENDPOS}
}


check_user_arguments
set_up_directories
perform_build
commit_the_jar
register_jar_as_library
perform_cleanup



No comments:

Post a Comment