Logoj0ke.net Open Build Service > Projects > Java > jpackage-utils > javawrapper
Sign Up | Log In

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