You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Anthony Vito <vi...@mnis.com> on 2003/09/23 18:14:01 UTC
My Scripts Are Your Scripts
Hello List,
I've been following the list for a while now. I love using Maven at
the command line. However, I found myself jumping all over and having
all sorts of terminals open and it was slowing me down too much. So I
wrote some shell functions and scripts ( as I imagine many others have
too ) to help me be more productive at the command line. Since Maven has
such a nice project structure it was fairly easy to create functions and
scripts to help out at the command line. My hope is to get some sort of
"contrib" going, if there isn't already one, with scripts like this.
Here's what I came up with. The 4 files are also attached because email
probably will mess up the formatting some what. They are just small text
files and should post just fine. These are bash scripts.... they "might"
work in cy-win.
- Anthony Vito
There are 4 files here
1.) MavenFunctions ( Shell functions )
2.) javacproj ( A javac wrapper script that uses maven dependencies from
a goal )
3.) runproj ( A java wrapper script that use maven deps, and accepts
.java files as input. )
4.) mavenproj ( A maven wrapper script that executes goals at the top of
the project no matter where you are. )
#MavenFunctions(Place this somewhere in your PATH /usr/local/bin for me)
##########################
# Maven Helper Functions #
##########################
# List the functions in this file
mavenhelpers() {
cat /usr/local/bin/MavenFunctions | grep \(\)
}
# If you are in project tree, ie
#.../someproject/src/(test|java)/some/package
# This will bring you to the project root.
ptop() {
pushd . > /dev/null
move="yes"
dir=`pwd`
curdir=$dir
bname=`basename $curdir`
while [ $bname != "src" ]; do
if [ $bname == "/" ]; then
echo "You Aren't In A Project Tree"
move="no"
popd > /dev/null
return 1;
fi
cd ..
curdir=`pwd`
bname=`basename $curdir`
done
if [ $move == "yes" ]; then
popd > /dev/null
cd $curdir
# one more up is the top
cd ..
fi
return 0;
}
# If you are in a project tree, ie
#.../someproject/src/(test|java)/some/package
# This is jump you to the same location on the other side of the tree.
# For example.
# if you are in src/java/some/package/is/cool, xcd will take you to
# src/test/some/package/is/cool. This is most helpful.
xcd() {
pushd . > /dev/null
move="yes"
dir=`pwd`
curdir=$dir
bname=`basename $curdir`
while [ $bname != "src" ]; do
if [ $bname == "/" ]; then
echo "You Aren't In A Project Tree"
move="no"
popd > /dev/null
return 1;
fi
cd ..
curdir=`pwd`
bname=`basename $curdir`
done
popd > /dev/null
if [ $move == "yes" ]; then
if [ -d $curdir/java ] && [ -d $curdir/test ]; then
# +5 for length of /java or /test
curdirlength=$((`expr length $curdir`))
baselength=$(($curdirlength+5))
dirlength=$((`expr length $dir`))
type="`expr substr $dir $(($curdirlength+2)) 4`"
case $type in
"java" ) type="test";;
"test" ) type="java";;
* ) type="none"
echo "Project Tree Format Unknown"
return 1;
esac
if [ $type != "none" ]; then
cd $curdir"/$type/"`expr substr $dir $(($baselength+2))
$dirlength`
fi
else
echo "Projected Tree Not Properly Formatted ie src/java src/java"
return 1;
fi
fi
return 0;
}
# END MavenFunctions.........##
# --- javacproj --- javac wrapper that uses maven's structure
#!/bin/bash
# This script will act almost like javac. I always liked
# the simplicity of "javac *.java" in fact, I have it
# aliased ;) What this does is use a classpath file
# called .mavenclasspath, which is created from a maven
# goal that is in my "master" maven.xml....
# <!--
# This goal writes out the current dependency classpath to a file.
# This is useful for any project / script external to maven, because
# it will be able to use the same classpath, and dependencies, from
# the repository.
# -->
# <goal name="createDeps">
# <!-- read in dependencies and construct a class path -->
# <ant:path id="classpath">
# <ant:path refid="maven.dependency.classpath"/>
# <ant:pathelement path="${maven.build.dest}"/>
# </ant:path>
# <!-- set the ID to a property -->
# <ant:property name="class.path" refid="classpath"/>
# <ant:echo
file="${basedir}/.mavenclasspath">${class.path}</ant:echo>
# </goal>
#
# <!--
# This does the same thing as the createDeps goal, but does it as
# a preGoal of java:compile, making it difficult for dependencies
# and the .mavenclasspath file to be inconsistent.
# -->
# <preGoal name="java:compile">
# <attainGoal name="createDeps"/>
# </preGoal>
#
# Oh, there it is ;)
#
# It also targets the default classes directory
projectTop/target/classes
# ( I know it doesn't handle the test side properly by targeting
test-classes
# if you're on the test side, you want to do it? ;) )
#
# So to use this thing you just do a "maven java:compile", or
# "maven createDeps" directly, either way is fine. Then hop into
# your source tree. Then, any time you need to compile stuff with
# the right classpath, just use "javacproj *.java". BAM good stuff.
#
pushd . > /dev/null
compile="yes"
dir=`pwd`
curdir=$dir
bname=`basename $curdir`
while [ $bname != "src" ]; do
if [ $bname == "/" ]; then
echo "You Aren't In A Project Tree"
compile="no"
popd > /dev/null
break
fi
cd ..
curdir=`pwd`
bname=`basename $curdir`
done
if [ $compile == "yes" ]; then
cd ..
# now I should be looking at a target directory
# if not... I'm making one
if [ ! -d target/classes ]; then
if [ ! -d target ]; then
mkdir target;
fi
mkdir target/classes
fi
targetdir=`pwd`/target/classes
cpFile=`pwd`/.mavenclasspath
popd > /dev/null
if [ -f $cpFile ]; then
classpath=`cat $cpFile`
exec javac -classpath $classpath -d $targetdir $@
else
echo "No Maven Classpath Found, Run 'maven createDeps' On The
Project."
compile="no"
fi
else
echo "No Compile Performed"
fi
# End --- javacproj -----
# --- runproj --- java wrapper that uses Maven's structure
#!/bin/bash
# This exciting script is the compliment to javacproj,
# with a helpful twist as always. It takes care of the
# classpath thing by using the same .mavenclasspath file
# as javacproj ( see javacproj for more details there )
# Also... I always hated having to type fully qualified
# paths to run the main of java class ( don't you )
# "java org.javavr.hotornot.ShowHotGirls".. it's a regular
# PITA. This script lets you be in the src directory and
# execute by giving the .java file as input. So you can
# use tab completion to run your mains, ain't that swell?
#
# Example.
# you are in "src/java/org/javavr/hotornot"
# command "runproj ShowHotGirls.java" will execute the main
# in ShowHotGirls.java. ( And show you the hot girls! )
#
# NOTE: It doesn't handle JVM arguments yet.
# Want to do it? ;)
pushd . > /dev/null
run="yes"
dir=`pwd`
curdir=$dir
bname=`basename $curdir`
packagename=$bname
while [ $bname != "src" ]; do
if [ $bname == "/" ]; then
echo "You Aren't In A Project Tree"
run="no"
popd > /dev/null
break
fi
cd ..
curdir=`pwd`
bname=`basename $curdir`
packagename=$bname"."$packagename
done
packagelength=`expr length $packagename`
packagename=`expr substr $packagename 10 $(($packagelength-8))`
if [ $run == "yes" ]; then
cd ..
# now I should be looking at a target directory
# if not... get out of here
if [ ! -d target/classes ]; then
echo "You Haven't Compiled Anything Yet"
exit
fi
basedir=`pwd`
cpFile=$basedir/.mavenclasspath
popd > /dev/null
if [ -f $cpFile ]; then
if [ "X$1" == "X" ]; then
echo "Usage: runproj [ classname | sourcefile ]"
exit
fi
classpath=`cat $cpFile`
classname=$1
length1=`expr length $classname`
if [ "X`expr substr $classname $(($length1 - 4)) 5`" == "X.java" ];
then
classname=`expr substr $classname 1 $(($length1 - 5))`
fi
shift
echo "Executing Class: $packagename.$classname $@"
#exec java -Dmavenbasedir=$basedir -Xmx512m -verbosegc
-Xrunhprof:cpu=samples,thread=y -classpath $classpath
$packagename"."$classname $@
exec java -Dmavenbasedir=$basedir -Xmx512m -classpath $classpath
$packagename"."$classname $@
else
echo "No Maven Classpath Found, Run 'maven createDeps' On The
Project."
run="no"
fi
else
echo "No Run Performed"
fi
# --- End --- runproj
# --- mavenproj --- maven wrapper to execute from top of project
#!/bin/bash
# Oh this one is real fun. This was more of a
# "putting it all together" script. This simple
# guy lets you execute maven goals on the project
# while you are sitting in the src or test tree.
# Very helpful, let me tell you....
. MavenFunctions
ptop
if [ $? == 0 ]; then
echo "Executing Goal From Project Top: `pwd`"
maven $@
else
echo "No Goal Executed"
fi
# --- End --- mavenproj
Re: My Scripts Are Your Scripts
Posted by Anthony Vito <vi...@mnis.com>.
I have cut out my one page of documentation on these helper scripts and
placed it here http://www.cs.oswego.edu/~vito/commandLineTools.html It
reads pretty easy. Let me know what you think.
-Anthony Vito
> snip all
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org