linux服务器部署jar包以及shell脚本的书写

背景:记录在linux环境下部署jar程序的过程java

1 部署过程记录

1.1 程序结构

这里的main函数就在DemRest2.java 文件中。linux

为了部署方便,要作到如下两点:web

1 在导出的jar包中不包含依赖的jar文件shell

2 程序用到的配置文件可让用户进行自定义 ,不将其放在jar包中。编程

1.2 导出jar包

这里导出普通的jar包便可。为了方便传输,只导出必须的程序文件。vim

在jar包导出后,进入导出的jar包中,将配置文件tws.properties文件删除。windows

1.3 程序部署

将全部须要的jar包放在lib目录下面,包括咱们导出工程的jar包tws-client-demo.jartomcat

在用户自定义目录中,放置运行脚本和配置文件。bash

ps:运行脚本所在的目录,就至关于程序运行的根目录,全部的配置文件和运行脚本放置在同一目录便可。app

这里程序中怎么读取配置文件,还须要好好研究。。。。。。。

#!/bin/sh
sourceMsgPath=/home/tws/server/tws-test/userMsg/lxw/

source /etc/profile
for i in $HOME/server/tws-test/lib/*;
    do CLASSPATH=$i:"$CLASSPATH";
done
export CLASSPATH=.:${CLASSPATH}
java  demo.rest.DemRest2 $sourceMsgPath$1

echo "Success!"

 对照以上脚本进行解释:

运行程序:

在用户目录下面,程序可以读到jar包外部的配置文件。

 2 标准脚本

 在网上找的一个脚本范例:

在编写shell脚本出现错误时候,能够做为参考:

#! /bin/sh
export JAVA_HOME=/usr/java/jdk1.6.0_18
export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
for i in lib/*.jar; 
        do CLASSPATH=$i:${CLASSPATH} 
done
export CLASSPATH=.:${CLASSPATH}
java -cp ${CLASSPATH} main方法所在包名.main方法所在的类名
若是上述脚本不能顺利执行,能够尝试
#!/bin/bash后追加

source /etc/profile
source ~/.bash_profile
 测试下。。

java -cp java的cp命令

java -cp .;c:\dir1\lib.jar Test
 
-cp 和 -classpath 同样,是指定类运行所依赖其余类的路径,一般是类库,jar包之类,须要全路径到jar包,window上分号“;”
 
分隔,linux上是分号“:”分隔。不支持通配符,须要列出全部jar包,用一点“.”表明当前路径。

3 半自动化工程部署

ps:在处理第三方管理平台项目时候,忽然想写一个自动化的shell脚本,其实脚本很简单,只不过前期走了些弯路,虽然说麻烦,可是对本身来讲也是一次提升。
 
我遇到的问题是
ps:刚开始我还觉得是脚本语法问题,后来网上搜索才知道是这个问题。解决后,后面的脚本就是经常使用命令的集合。

问题:经过ftp传输工具在windows下编辑的脚本,在执行的时候会出现no such file or directory状况。
是由于平台不一样致使的。执行下列命令便可
INUX下SHELL编程脚本没法执行,提示no such file or directory.
sudo vim xx.sh
:set ff=unix
:wq
就OK了
(若是是在windows里写的脚本,你输入:set ff 应该显示的是DOS)

最终的shell脚本:
#!/bin/bash
#war包上传临时目录
warPath=/usr/local/tmp-tms
#tomcat中webapps中文件
service_webapps=/usr/local/service-tomcat7/webapps
web_webapps=/usr/local/web-tomcat7/webapps
#待替换的配置文件
from_service_config=$warPath/224-service
to_service_config=$service_webapps/tms_service/WEB-INF/classes
from_web_config=$warPath/224-web
to_web_config=$web_webapps/tms/WEB-INF/classes

deployService(){
    #清空tomcat  webapps下的文件
    rm -rf $service_webapps/*
    echo "完成临时目录的清理:$service_webapps"
    #移动war文件到webappps目录
    mv $warPath/tms_service.war $service_webapps
    echo "完成war文件的移动:$service_webapps/tms_service.war"
    #解压war包
    cd $service_webapps
    unzip tms_service.war -d tms_service
    echo "完成war文件解压:$service_webapps/tms_service.war"
    #替换war中的配置文件
    cp $from_service_config/log4j.properties $to_service_config/log4j.properties
    cp $from_service_config/resources.properties $to_service_config/resources.properties
    cp $from_service_config/service.xml $to_service_config/service.xml
    echo "完成Service工程配置文件的替换!"
}

deployWeb(){
    #清空tomcat  webapps下的文件
    rm -rf $web_webapps/*
    echo "完成临时目录的清理:$web_webapps"
    #移动war文件到webappps目录
    mv $warPath/tms.war $web_webapps
    echo "完成war文件的移动:$web_webapps/tms.war"
    #解压war包
    cd $web_webapps
    unzip tms.war -d tms
    echo "完成war文件解压:$web_webapps/tms.war"
    #替换war中的配置文件
    cp $from_web_config/log4j.properties $to_web_config/log4j.properties
    cp $from_web_config/service.xml $to_web_config/service.xml
    cp $from_web_config/tms.properties $to_web_config/tms.properties
    echo "完成web工程配置文件的替换!"
}

##############脚本入口
#./deploy.sh service      ---只部署service
#./deploy.sh web          ---只部署web
#./deploy.sh both           ---同时部署service和web

if [ $1 == "service" ]
then
    deployService
   echo "只部署service,successful"
elif [ $1 == "web" ]
then
    deployWeb
   echo "只部署web,successful"
elif [ $1 == "both" ]
then
   deployService
   sleep 10
   deployWeb
   echo "同时部署service和web,successful!"
else
   echo "请输入一个正确参数:service web both"
fi
View Code

 用到啥就去查什么,一切都不是困难,态度决定成效!!!!

相关文章
相关标签/搜索