File javawrapper of Package jpackage-utils
1
#!/bin/bash
2
# /usr/local/bin/javawrapper - the wrapper for binfmt_misc/java
3
4
if [ $# -lt 1 ]
5
then
6
echo "Use this program to execute a Java class file, usage:"
7
echo -e "\t$0 <jar file>.class"
8
exit 1;
9
fi
10
11
CLASS=$1
12
FQCLASS=`/usr/bin/javaclassname $1`
13
FQCLASSN=`echo $FQCLASS | sed -e 's/^.*\.\([^.]*\)$/\1/'`
14
FQCLASSP=`echo $FQCLASS | sed -e 's-\.-/-g' -e 's-^[^/]*$--' -e 's-/[^/]*$--'`
15
16
# for example:
17
# CLASS=Test.class
18
# FQCLASS=foo.bar.Test
19
# FQCLASSN=Test
20
# FQCLASSP=foo/bar
21
22
unset CLASSBASE
23
24
declare -i LINKLEVEL=0
25
26
while :; do
27
if [ "`basename $CLASS .class`" == "$FQCLASSN" ]; then
28
# See if this directory works straight off
29
cd -L `dirname $CLASS`
30
CLASSDIR=$PWD
31
cd $OLDPWD
32
if echo $CLASSDIR | grep -q "$FQCLASSP$"; then
33
CLASSBASE=`echo $CLASSDIR | sed -e "s.$FQCLASSP$.."`
34
break;
35
fi
36
# Try dereferencing the directory name
37
cd -P `dirname $CLASS`
38
CLASSDIR=$PWD
39
cd $OLDPWD
40
if echo $CLASSDIR | grep -q "$FQCLASSP$"; then
41
CLASSBASE=`echo $CLASSDIR | sed -e "s.$FQCLASSP$.."`
42
break;
43
fi
44
# If no other possible filename exists
45
if [ ! -L $CLASS ]; then
46
exec 1>&2
47
echo $0:
48
echo " $CLASS should be in a" \
49
"directory tree called $FQCLASSP"
50
exit 1
51
fi
52
fi
53
if [ ! -L $CLASS ]; then break; fi
54
# Go down one more level of symbolic links
55
let LINKLEVEL+=1
56
if [ $LINKLEVEL -gt 5 ]; then
57
exec 1>&2
58
echo $0:
59
echo " Too many symbolic links encountered"
60
exit 1
61
fi
62
CLASS=`ls --color=no -l $CLASS | sed -e 's/^.* \([^ ]*\)$/\1/'`
63
done
64
65
if [ -z "$CLASSBASE" ]; then
66
if [ -z "$FQCLASSP" ]; then
67
GOODNAME=$FQCLASSN.class
68
else
69
GOODNAME=$FQCLASSP/$FQCLASSN.class
70
fi
71
exec 1>&2
72
echo $0:
73
echo " $FQCLASS should be in a file called $GOODNAME"
74
exit 1
75
fi
76
77
if ! echo $CLASSPATH | grep -q "^\(.*:\)*$CLASSBASE\(:.*\)*"; then
78
# class is not in CLASSPATH, so prepend dir of class to CLASSPATH
79
if [ -z "${CLASSPATH}" ] ; then
80
export CLASSPATH=$CLASSBASE
81
else
82
export CLASSPATH=$CLASSBASE:$CLASSPATH
83
fi
84
fi
85
86
shift
87
88
if [ ! -x $1 ]
89
then
90
if which kdialog
91
then
92
kdialog --error "$1 does not have execute permission ... please fix"
93
elif which zenity
94
then
95
zenity --error --text="$1 does not have execute permission ... please fix"
96
else
97
echo "$1 does not have execute permission ... please fix"
98
echo
99
read
100
fi
101
exit 1
102
fi
103
104
105
echo "executing:"
106
echo -e "\t/usr/bin/java $FQCLASS \"$@\":"
107
echo
108
echo
109
if ! /usr/bin/java $FQCLASS "$@"
110
then
111
echo "The execution of $1 failed. The reason is probably that $1 does not contain a main method "
112
echo "The class was called as follows:"
113
echo " /usr/bin/java $FQCLASS \"$@\""
114
fi
115
116
echo Press key to exit ...
117
read
118