创建一个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不做要求.
推荐阅读: