老酒馆 编写bat、sh脚本运行java程序

创建一个java程序,将代码及依赖打包放入lib目录下,配置文件放入conf目录下,编写run.bat、run.sh脚本,在windows、linux运行程序

windows操作系统下

在run.bat所在目录下打开dos窗口(cmd.exe),输入run.bat,回车即可运行程序(双击run.bat也可运行程序)

@title My APP
 @echo off
 setlocal enabledelayedexpansion
 set JAVA=jre1.6.0_45\bin\java.exe
 set OPTS=-Xms512M -Xmx1024M -Xss256k -XX:+AggressiveOpts -XX:+UseParallelGC -XX:NewSize=64M -XX:+HeapDumpOnOutOfMemoryError
 set LIBPATH=lib
 set ENGINE=.
 set CP=%ENGINE%;conf
 set MAIN=xxx.xxx.xxx.Main


 for /f %%i in ('dir /b %LIBPATH%\*.jar^|sort') do (
    set CP=!CP!;%LIBPATH%\%%i
 )

 echo ===============================================================================
 echo.
 echo   Engine Startup Environment
 echo.
 echo   JAVA: %JAVA%
 echo.
 echo   JAVA_OPTS: %OPTS%
 echo.
 echo   CLASSPATH: %CP%
 echo.
 echo ===============================================================================
 echo.

 @echo on
 %JAVA% %OPTS% -classpath %CP% %MAIN%
带界面的 GUI 程序

如果 java 程序是带界面的GUI程序,建议使用 javaw.exe 运行(即 set JAVA=jre1.6.0_45\bin\javaw.exe ),好处是可以关闭run.bat 的窗口,不会造成 GUI 界面关闭。

脚本如下:

::author@oldpub
::ANSI file encoding is required under windows OS
@title My APP
@echo off
setlocal enabledelayedexpansion
set JAVA=jre1.6.0_45\bin\javaw.exe
set OPTS=-Xms512M -Xmx1024M -Xss256k -XX:+AggressiveOpts -XX:+UseParallelGC -XX:NewSize=64M -XX:+HeapDumpOnOutOfMemoryError
set LIBPATH=lib
set ENGINE=.
set CP=%ENGINE%;conf
set MAIN=xxx.xxx.xxx.Main

for /f %%i in ('dir /b %LIBPATH%\*.jar^|sort') do (
set CP=!CP!;%LIBPATH%\%%i
)
echo.
echo ===============================================================================
echo.
echo   Engine Startup Environment
echo.
echo   JAVA: %JAVA%
echo.
echo   JAVA_OPTS: %OPTS%
echo.
echo   CLASSPATH: %CP%
echo.
echo ===============================================================================
echo.

@echo on
start %JAVA% %OPTS% -classpath %CP% %MAIN%
@echo off
echo.
echo ===============================================================================
echo.
echo 即将打开程序,请耐心等待......
echo.
echo ===============================================================================
@timeout 5
Linux操作系统下

执行 ./run.sh start 启动程序; ./run.sh stop 停止程序; ./run.sh restart 重启程序

[root@centos7 MyAPP]# ./run.sh start
[root@centos7 MyAPP]# ./run.sh stop 
[root@centos7 MyAPP]# ./run.sh restart 
#!/bin/bash
export APP_DIR=$(cd $(dirname $0); pwd)
export CP=${APP_DIR}:${APP_DIR}/conf:`find ${APP_DIR}/lib -name "*.jar" |xargs|sed "s/ /:/g"`
export MAIN=xxx.xxx.xxx.Main

export JAVA=java
export OPTS="-Xms512M -Xmx1024M -Xss256k -XX:+AggressiveOpts -XX:+UseParallelGC -XX:NewSize=64M -XX:+HeapDumpOnOutOfMemoryError"

mainPID=0

getMainPID(){
    javaps=`jps -l | grep $MAIN`
    if [ -n "$javaps" ]; then
        mainPID=`echo $javaps | awk '{print $1}'`
    else
        mainPID=0
    fi
}

startup()
{
    getMainPID
    if [ $mainPID -ne 0 ]; then
        echo "App is already started(PID=$mainPID)"
    else
        cd ${APP_DIR}
        $JAVA $OPTS -classpath $CP $MAIN &
        getMainPID
        cd - 1>/dev/null 2>&1
        echo "App has been started(PID=$mainPID)"
    fi
}

shutdownapp()
{
    getMainPID
    if [ $mainPID -ne 0 ]; then
        echo "Try to stop, please wait ..."
        kill -9 $mainPID
        getMainPID
        if [ $mainPID -ne 0 ]; then
            shutdownapp
        fi
        echo "App has been stopped"
    else
        echo "App is not running"
    fi
}

case "$1" in
  start)
    startup
  ;;
  stop)
    shutdownapp
  ;;
  restart)
    $0 stop
    $0 start
  ;;
  *)
  echo "Usage:"
  echo "./run.sh start/stop/restart"
  exit 1;;
esac
其他

除了脚本运行的方式,还可以打包成可执行程序,例如:

exe4j

launch4j

jPackage,jdk14新发布,面向java桌面端程序打包. 可以让windows/mac 直接双击使用java程序,对系统里面有没有jdk/jre不做要求.

推荐阅读:

首发! JDK14之jpackage命令尝鲜

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值