java启动时的classpass及扩展类目录

CLASSPATH方式

通过CLASSPATH将需引用的外部jar文件传给java进行装载。

此方式当lib下有很多jar文件时,命令行参数会很长,甚至超过命令行字数限制而启动失败。

    ...
    # Set CLASSPATH
    [ -z "$CLASSPATH" ] && CLASSPATH=$MY_HOME
    for f in $MY_HOME/lib/*.jar; do
        echo "$CLASSPATH"|grep "$f" > /dev/null 2>&1 || CLASSPATH=${CLASSPATH}:$f;
    done

    nohup $JAVA $JAVA_OPTS -classpath $CLASSPATH com.serverbootstrap.Main >> "$LOGFILE" 2>&1 &
    echo $! > "$PIDFILE"
    ...
    ...
    # Set CLASSPATH
    [ -z "$CLASSPATH" ] && CLASSPATH=$MY_HOME

    for f in $MY_HOME/lib/*.jar; do
        echo "$CLASSPATH"|grep "$f" > /dev/null 2>&1 || CLASSPATH=${CLASSPATH}:$f;
    done
    export CLASSPATH  # 将CLASSPATH放到env中
    # 也可以用下面的语句代替
    #export CLASSPATH=$CLASSPATH:$MY_HOME/lib/*.jar

    nohup $JAVA $JAVA_OPTS com.serverbootstrap.Main >> "$LOGFILE" 2>&1 &
    echo $! > "$PIDFILE"
    ...

Djava.ext.dirs方式

将需引用的jar文件都放到指的几个目录中,并在启动命令行参数中添加对应目录参数,使启动参数更为简捷。

    ...
    # Djava.ext.dirs中加上lib目录
    JAVA_OPTS="$JAVA_OPTS -Djava.ext.dirs=$JAVA_HOME/jre/lib/ext:$MY_HOME/lib"
    ...
    # Set CLASSPATH时不用再加入所有lib的jar文件
    [ -z "$CLASSPATH" ] && CLASSPATH=$MY_HOME
    export CLASSPATH 

    nohup $JAVA $JAVA_OPTS com.serverbootstrap.Main >> "$LOGFILE" 2>&1 &
    echo $! > "$PIDFILE"
    ...