java服务器浅入浅出之简略的java程序发布
本篇将记录下一个简单的java程序在linux上的部署设置,以及发布脚本的编写。粗糙、简略。 //神奇!勿动
1.首先写了一个简单的java程序,一个死循环,不停地输出一句话。
2.把工程共享到svn上。
3.编写publish_test.sh脚本,实现svn源码的检出,调用ant编译、打包,以及其他准备操作。
<span style="font-size:18px;">. /home/testjava/publish/config.sh mkdir -p ${PUBLISH_TEST_SVN_ROOT} if [ `ls -la ${PUBLISH_TEST_SVN_ROOT} | wc -l` == 3 ] then svn checkout ${URL_SVN_TEST_ROOT} ${PUBLISH_TEST_SVN_ROOT} else svn update ${PUBLISH_TEST_SVN_ROOT} fi ant -buildfile ${PUBLISH_TEST_ROOT}/build.xml clean ant -f ${PUBLISH_TEST_ROOT}/build.xml mkdir -p ${PUBLISH_TEST_LOGS_ROOT} touch ${PUBLISH_TEST_LOG}</span>其中config.sh中是预先声明好的一些路径信息。
4.利用ant将工程编译、打包。这里要编写配置文件。我用的默认名字build.xml。
<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8" standalone="no"?> <project basedir="." default="build" name="test"> <property environment="env"/> <property name="root.path" value="/home/testjava/publish"/> <property name="db.path" value="${root.path}/testjava"/> <property name="db.svn.path" value="${db.path}/svn"/> <property name="db.source.path" value="${db.svn.path}/src"/> <property name="db.lib.path" value="${db.svn.path}/libs"/> <property name="db.output.path" value="${db.path}/output"/> <property name="db.binout.path" value="${db.output.path}/bin"/> <property name="db.jarout.path" value="${db.output.path}/jar"/> <property name="db.jar.name" value="testjava.jar"/> <property name="debuglevel" value="source,lines,vars"/> <property name="target" value="1.6"/> <property name="source" value="1.6"/> <path id="db.classpath"> <fileset file="${db.lib.path}/*.jar"> </fileset> </path> <target depends="build-db,pack-db" name="build"/> <target name="init"> <mkdir dir="${db.binout.path}"/> <mkdir dir="${db.jarout.path}"/> </target> <target name="clean"> <delete dir="${db.binout.path}"/> <delete file="${db.jarout.path}/${db.jar.name}"/> </target> <target depends="init" name="build-db"> <javac debug="true" debuglevel="${debuglevel}" destdir="${db.binout.path}" source="${source}" target="${target}" includeantruntime="on" encoding="utf8"> <src path="${db.source.path}"/> <classpath refid="db.classpath"/> </javac> </target> <target name="pack-db"> <jar destfile="${db.jarout.path}/${db.jar.name}" basedir="${db.binout.path}"/> </target> </project></span>
这里的clean可以设置为build的依赖,我没有这么写而已。 javac将源码编译成class,jar将class打包成jar包。
5.编写以服务器形式运行jar包工程的脚本。start.sh
<span style="font-size:18px;">java -Dserver_name=/home/testjava/publish/testjava/output -Djava.net.preferIPv4stack=true -server -Xmx1g -Xmn512m -cp /home/testjava/publish/testjava/output/jar/* test.system.Main</span>
首先在/etc/init.d 下写服务脚本testjava.sh。
<span style="font-size:18px;">#!/bin/sh #chkconfig: 35 20 80 #description: testjava server EXEC_PATH=/home/testjava/publish/testjava/output EXEC=start.sh pid="" if [ -x $EXEC+path/%EXEC ]; then echo "project not found..." exit 1 fi getpid() { pid=`ps axjf | grep "Dserver_name=${EXEC_path}" | grep -v "grep" | awk '{print $2}'` } stop() { getpid if [ -z ${pid} ] then echo "ERROR : server has not been started..." else echo "server is stoping..." kill -15 ${pid} fi } start() { getpid if [ -z ${pid} ] then echo "server is starting..." cd ${EXEC_PATH} ./${EXEC} >>logs/log 2>&1 & else echo "ERROR : server has been started already..." fi } restart() { stop start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; *) echo "Usage: service $EXEC {start|stop|restart|status}" exit 1 esac exit 0</span>
其中log重定向时 2>&1 是将错误信息转作普通信息输出到标准输出 &是将这条语句在后台运行。
最后 chkconfig --add autoruntest 添加服务。
7.编写最终的启动、停止脚本。
startall.sh
service testjava.sh startstopall.sh
service testjava.sh stop
==================================================================== -- end
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。